分享

MSSQL:查看所有触发器信息的命令

 npkaida 2015-03-12

注: sys.triggers 仅存在于 MSSQL2008 以上版本,因此这里的命令不适用于MSSQL2000

MSSQL:查看所有触发器信息的命令
2013-07-18     来源:朱金拖的专栏  

MSSQL:查看所有触发器信息的命令
编写程序,有时或为了偷懒,或为更简单地实现所需功能,使用了触发器。这可是把双刃剑,用得不好,程序出现一些莫名其妙的错误,排查到最后,可能就是触发器造成的。
基本原则是能不用则不用,另一方面,所谓存在即合理,既然存在,总会有使用它的场景。用到了,怎么去管理去监控?一个方法是通过SQL语句,列出所有触发器的信息。
语句
[sql] 
-- 查看当前数据库所有触发器信息  
SELECT   
    object_name(a.parent_obj) as [表名]  
    ,a.name as [触发器名称]  
    ,(case when b.is_disabled=0 then '启用' else '禁用' end) as [状态]  
    ,b.create_date as [创建日期]  
    ,b.modify_date as [修改日期]  
    ,c.text as [触发器语句]  
FROM sysobjects a  
    INNER JOIN sys.triggers b  
        ON b.object_id=a.id  
    INNER JOIN syscomments c  
        ON c.id=a.id  
WHERE a.xtype='tr'  
ORDER BY [表名]  
 

后记
最开始只要表名、触发器名、触发器语句,很容易就写好语句,后来想把触发器状态也加上,自己没头绪,先网络搜索,竟然没能找到直接可用的信息,有找到针对SQL2000,只是自己早已不使用此版本,那么再一次自力更生吧。
一时也不知道还有哪个系统视图或表可以使用,同时发现SQL Server Management Studio的对象资源管理器中,可以看出触发器状态(图标不同,禁用状态的图标右下角多出一个红色的小箭头)。很自然想到利用SQL Server Profiler捕获语句,这招真是屡试不爽,果然如我所愿,找到sys.triggers这个视图,状态问题,顺利解决。

示例:

SELECT   
    b.is_disabled as [状态]  
FROM sysobjects a  
    INNER JOIN sys.triggers b  
        ON b.object_id=a.id  
    INNER JOIN syscomments c  
        ON c.id=a.id  
WHERE a.xtype='tr'  and a.name='trigger_MaterialContract'

SELECT   
    b.is_disabled as [状态]  
FROM sysobjects a  
    INNER JOIN sys.triggers b  
        ON b.object_id=a.id  
    INNER JOIN syscomments c  
        ON c.id=a.id  
WHERE a.xtype='tr'  and a.name='trigger_MaterialContractDetail_GoodsCheckOut'

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多