如何在SQL Server中获取触发器的定义(正文)?

har*_*rpo 20 sql-server triggers metadata

无法找到满足我需求的SQL diff工具,我正在编写自己的工具.在INFORMATION_SCHEMA和sys表之间,我有一个大部分完整的工作版本.但是我在元数据中找不到的一件事是触发器的定义,你知道,实际的SQL代码.我忽略了什么吗?

谢谢.


谢谢,皮特,我不知道那个!

斯科特,我正在使用非常基本的托管包,不允许远程连接到数据库.我不知道RedGate的规格(我无论如何都买不起)是否提供了解决方法,虽然还有API(例如来自Apex的API),我没有看到投资一个仍然需要我更多编程的解决方案.:)

我的解决方案是在网站上删除一个ASPX页面作为一种"模式服务",将收集的元数据作为XML返回.我设置了一个小的AJAX应用程序,可以将任意数量的目录实例与主数据库进行比较并显示差异.它并不完美,但对我来说是一个重大进步.

再次感谢!

Pet*_*ete 24

sp_helptext用于获取构成触发器的sql.

syscomments视图中的text列还包含用于创建对象的sql.


SQL*_*ace 16

对于2005和2008,您可以使用OBJECT_DEFINITION()函数

  • 2005年 - 2012年的工作 - https://msdn.microsoft.com/en-us/library/ms176090%28v=sql.110%29.aspx (2认同)

Sat*_*ish 15

SELECT     
    DB_NAME() AS DataBaseName,                  
    dbo.SysObjects.Name AS TriggerName,
    dbo.sysComments.Text AS SqlContent
FROM 
    dbo.SysObjects INNER JOIN 
        dbo.sysComments ON 
        dbo.SysObjects.ID = dbo.sysComments.ID
WHERE   
    (dbo.SysObjects.xType = 'TR') 
    AND 
    dbo.SysObjects.Name = '<YourTriggerName>'
Run Code Online (Sandbox Code Playgroud)


Lof*_*ftx 6

为了扩展 SQLMenace 的答案,这里有一个简单的查询,用于从数据库中返回所有触发器及其定义:

SELECT 
    sysobjects.name AS trigger_name, 
    OBJECT_NAME(parent_obj) AS table_name,
    OBJECT_DEFINITION(id) AS trigger_definition
FROM sysobjects 
WHERE sysobjects.type = 'TR' 
Run Code Online (Sandbox Code Playgroud)