Need to list all triggers in SQL Server database with table name and table's schema

后端 未结 19 954
再見小時候
再見小時候 2020-11-28 17:12

I need to list all triggers in SQL Server database with table name and table\'s schema.

I\'m almost there with this:

SELECT trigger_name = name, trig         


        
19条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-28 17:58

    Here's one way:

    SELECT 
         sysobjects.name AS trigger_name 
        ,USER_NAME(sysobjects.uid) AS trigger_owner 
        ,s.name AS table_schema 
        ,OBJECT_NAME(parent_obj) AS table_name 
        ,OBJECTPROPERTY( id, 'ExecIsUpdateTrigger') AS isupdate 
        ,OBJECTPROPERTY( id, 'ExecIsDeleteTrigger') AS isdelete 
        ,OBJECTPROPERTY( id, 'ExecIsInsertTrigger') AS isinsert 
        ,OBJECTPROPERTY( id, 'ExecIsAfterTrigger') AS isafter 
        ,OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger') AS isinsteadof 
        ,OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') AS [disabled] 
    FROM sysobjects 
    
    INNER JOIN sysusers 
        ON sysobjects.uid = sysusers.uid 
    
    INNER JOIN sys.tables t 
        ON sysobjects.parent_obj = t.object_id 
    
    INNER JOIN sys.schemas s 
        ON t.schema_id = s.schema_id 
    
    WHERE sysobjects.type = 'TR' 
    

    EDIT: Commented out join to sysusers for query to work on AdventureWorks2008.

    SELECT 
         sysobjects.name AS trigger_name 
        ,USER_NAME(sysobjects.uid) AS trigger_owner 
        ,s.name AS table_schema 
        ,OBJECT_NAME(parent_obj) AS table_name 
        ,OBJECTPROPERTY( id, 'ExecIsUpdateTrigger') AS isupdate 
        ,OBJECTPROPERTY( id, 'ExecIsDeleteTrigger') AS isdelete 
        ,OBJECTPROPERTY( id, 'ExecIsInsertTrigger') AS isinsert 
        ,OBJECTPROPERTY( id, 'ExecIsAfterTrigger') AS isafter 
        ,OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger') AS isinsteadof 
        ,OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') AS [disabled] 
    FROM sysobjects 
    /*
    INNER JOIN sysusers 
        ON sysobjects.uid = sysusers.uid 
    */  
    INNER JOIN sys.tables t 
        ON sysobjects.parent_obj = t.object_id 
    
    INNER JOIN sys.schemas s 
        ON t.schema_id = s.schema_id 
    WHERE sysobjects.type = 'TR' 
    

    EDIT 2: For SQL 2000

    SELECT 
         o.name AS trigger_name 
        ,'x' AS trigger_owner 
        /*USER_NAME(o.uid)*/ 
        ,s.name AS table_schema 
        ,OBJECT_NAME(o.parent_obj) AS table_name 
        ,OBJECTPROPERTY(o.id, 'ExecIsUpdateTrigger') AS isupdate 
        ,OBJECTPROPERTY(o.id, 'ExecIsDeleteTrigger') AS isdelete 
        ,OBJECTPROPERTY(o.id, 'ExecIsInsertTrigger') AS isinsert 
        ,OBJECTPROPERTY(o.id, 'ExecIsAfterTrigger') AS isafter 
        ,OBJECTPROPERTY(o.id, 'ExecIsInsteadOfTrigger') AS isinsteadof 
        ,OBJECTPROPERTY(o.id, 'ExecIsTriggerDisabled') AS [disabled] 
    FROM sysobjects AS o 
    /*
    INNER JOIN sysusers 
        ON sysobjects.uid = sysusers.uid 
    */  
    INNER JOIN sysobjects AS o2 
        ON o.parent_obj = o2.id 
    
    INNER JOIN sysusers AS s 
        ON o2.uid = s.uid 
    
    WHERE o.type = 'TR'
    

提交回复
热议问题