Sql server 如何在SQL Server中获取触发器的定义(主体)?

Sql server 如何在SQL Server中获取触发器的定义(主体)?,sql-server,triggers,metadata,Sql Server,Triggers,Metadata,无法找到满足我需要的SQLDiff工具,我正在编写自己的工具。在INFORMATION_SCHEMA和sys表之间,我有一个基本完整的工作版本。但有一件事我在元数据中找不到,那就是触发器的定义,你知道,实际的SQL代码。我是不是忽略了什么 谢谢 谢谢,皮特,我不知道 Scott,我使用的是非常基本的主机包,不允许远程连接到数据库。我不知道RedGate上的规范(反正我也买不起)是否提供了解决方案,尽管也有API(比如Apex的API),但我不认为投资于解决方案有什么意义,因为我仍然需要更多的编

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

谢谢


谢谢,皮特,我不知道

Scott,我使用的是非常基本的主机包,不允许远程连接到数据库。我不知道RedGate上的规范(反正我也买不起)是否提供了解决方案,尽管也有API(比如Apex的API),但我不认为投资于解决方案有什么意义,因为我仍然需要更多的编程

我的解决方案是在站点上放置一个充当“模式服务”的ASPX页面,将收集的元数据作为XML返回。我建立了一个小AJAX应用程序,可以将任意数量的目录实例与主目录进行比较,并显示差异。这并不完美,但对我来说是向前迈出的重要一步


再次感谢

sp_helptext用于获取组成触发器的sql


syscomments视图中的文本列还包含用于创建对象的sql。

对于2005年和2008年,您可以使用函数选择 DB_NAME()作为数据库名, dbo.SysObjects.Name作为TriggerName, dbo.sysComments.Text作为SqlContent 从…起 dbo.SysObjects内部联接 上的dbo.sysComments dbo.SysObjects.ID=dbo.sysComments.ID 哪里 (dbo.SysObjects.xType='TR') 及 dbo.SysObjects.Name=“”
要扩展SQLMenage的答案,这里有一个简单的查询,用于从数据库返回所有触发器及其定义:

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' 

此查询返回触发器及其名称和主体

Select 
    [tgr].[name] as [trigger name], 
    [tbl].[name] as [table name] , 
    OBJECT_DEFINITION(tgr.id) body

    from sysobjects tgr 

    join sysobjects tbl
    on tgr.parent_obj = tbl.id

WHERE tgr.xtype = 'TR'

您可以通过多种方式查看SQL Server触发器定义

系统视图查询:

SELECT definition
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('trigger_name');

使用对象定义功能定义:

SELECT OBJECT_DEFINITION(OBJECT_ID('trigger_name')) AS trigger_definition;
使用sp_helptext存储过程定义:

EXEC sp_helptext 
 'trigger_name';

为了扩展Pete所写的内容,
sp_helptext
对于揭示任何触发器、视图、存储过程、函数等背后的SQL非常有用。另请参见:…2005-2012年的工作-这使得搜索引用其他对象的对象非常容易,甚至可以搜索更复杂的查询,如“哪个sp执行表X的插入”注意-中的
text
字段的类型为
nvarchar(4000)
,因此这将修剪任何大于4k字符的触发器。如果可能的话,可能值得使用
OBJECT\u定义(id)
SELECT OBJECT_DEFINITION(OBJECT_ID('trigger_name')) AS trigger_definition;
EXEC sp_helptext 
 'trigger_name';