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

后端 未结 19 1000
再見小時候
再見小時候 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:54

        CREATE TABLE [dbo].[VERSIONS](
            [ID] [uniqueidentifier] NOT NULL,
            [DATE] [varchar](100) NULL,
            [SERVER] [varchar](100) NULL,
            [DATABASE] [varchar](100) NULL,
            [USER] [varchar](100) NULL,
            [OBJECT] [varchar](100) NULL,
            [ACTION] [varchar](100) NULL,
            [CODE] [varchar](max) NULL,
         CONSTRAINT [PK_VERSIONS] PRIMARY KEY CLUSTERED 
        (
            [ID] ASC
        )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
        ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
        GO
    
        ALTER TABLE [dbo].[VERSIONS] ADD  CONSTRAINT [DF_VERSIONS_ID]  DEFAULT (newid()) FOR [ID]
        GO
    
    
        DROP TRIGGER [DB_VERSIONS_TRIGGER] ON ALL SERVER
    
        CREATE TRIGGER [DB_VERSIONS_TRIGGER] ON ALL SERVER FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE, 
        CREATE_TRIGGER, ALTER_TRIGGER, DROP_TRIGGER, CREATE_FUNCTION, ALTER_FUNCTION, DROP_FUNCTION, CREATE_VIEW, ALTER_VIEW, 
        DROP_VIEW, CREATE_TABLE, ALTER_TABLE, DROP_TABLE 
        AS 
        SET NOCOUNT ON SET XACT_ABORT OFF; 
        BEGIN 
            TRY 
                DECLARE @DATA XML = EVENTDATA() 
                DECLARE @SERVER VARCHAR(100) = @DATA.value('(EVENT_INSTANCE/ServerName)[1]','VARCHAR(100)') 
                DECLARE @DATABASE VARCHAR(100) = @DATA.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'VARCHAR(100)') 
                DECLARE @USER VARCHAR(100) = @DATA.value('(/EVENT_INSTANCE/LoginName)[1]','VARCHAR(100)') 
                DECLARE @OBJECT VARCHAR(100) = @DATA.value('(EVENT_INSTANCE/ObjectName)[1]','VARCHAR(100)') 
                DECLARE @ACTION VARCHAR(100) = @DATA.value('(/EVENT_INSTANCE/EventType)[1]','VARCHAR(100)') 
                DECLARE @CODE VARCHAR(MAX) = @DATA.value('(/EVENT_INSTANCE//TSQLCommand)[1]','VARCHAR(MAX)' ) 
    
                IF OBJECT_ID('DB_VERSIONS.dbo.VERSIONS') IS NOT NULL 
                BEGIN 
                    INSERT INTO [DB_VERSIONS].[dbo].[VERSIONS]([SERVER], [DATABASE], [USER], [OBJECT], [ACTION], [DATE], [CODE]) VALUES (@SERVER, @DATABASE, @USER, @OBJECT, @ACTION, getdate(), ISNULL(@CODE, 'NA')) 
                END 
            END 
            TRY 
            BEGIN 
                CATCH 
            END 
        CATCH 
        RETURN
    

提交回复
热议问题