在SQL Server中查询服务器级触发器定义

时间:2018-02-16 16:08:06

标签: sql-server sql-server-2008-r2

我正在尝试查询服务器级触发器的定义文本。更具体地说,尝试从用户定义的存储过程中查询定义。因为触发器保存在服务器级别,所以正常方式似乎不起作用。

我尝试了什么:

1) sp_helptext:范围错误,我收到消息:

  

消息15009,级别16,状态1,过程sp_helptext,第54行   对象'myTrigger'在数据库'master'中不存在或对此操作无效。

2)SELECT OBJECT_DEFINITION (OBJECT_ID(N'myTrigger)) AS ObjectDefinition;

返回NULL。我用sys.server_triggers中的对象id替换了“myTrigger”。这也会返回NULL

3)

SELECT
    name,
    s.Definition
FROM 
    sys.server_triggers t
    INNER JOIN sys.sql_modules  s
        ON t.object_id = s.object_id
WHERE name = 'myTrigger'

sys.sql_modules

中不存在该对象

1 个答案:

答案 0 :(得分:1)

试试这个

SELECT ssmod.definition AS [Definition]
FROM master.sys.server_triggers AS tr
LEFT OUTER JOIN master.sys.server_assembly_modules AS mod ON mod.object_id = tr.object_id
LEFT OUTER JOIN sys.server_sql_modules AS ssmod ON ssmod.object_id = tr.object_id
WHERE (tr.parent_class = 100) and (tr.name = 'MyTriggerName')