Если условие не поддерживается в триггерах DDL - PullRequest
0 голосов
/ 07 октября 2018

У меня есть триггер DDL для мониторинга изменений, внесенных в конкретные таблицы в базе данных SQL Server.Но это не работает.Удивительно, что когда я удаляю табличный фильтр (то есть оператор IF), он работает.Даже если я попытался поставить условие типа 1 = 1, оно также не работает.Таким образом, мое наблюдение состоит в том, что условие IF здесь не работает по некоторым причинам.Пожалуйста, помогите, что здесь не так.Ниже приведен триггер DDL.

CREATE TRIGGER [SQLObjectMonitoring]
ON DATABASE
FOR create_table, alter_table, drop_table
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @data XML = EVENTDATA()

    DECLARE @DatabaseName [varchar](256) = @data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)')
    DECLARE @EventType [varchar](50) = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)')  -- value is case-sensitive
    DECLARE @ObjectName [varchar](256) = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)')
    DECLARE @ObjectType [varchar](25) = @data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)')
    DECLARE @SQLCommOR [varchar](max) = @data.value('(/EVENT_INSTANCE/TSQLCommOR)[1]', 'varchar(max)')
    DECLARE @LoginName [varchar](256) = @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')

    IF(@ObjectName = 'TABLE1' OR @ObjectName = 'TABLE2' OR @ObjectName = 'TABLE3' OR @ObjectName = 'TABLE4' OR @ObjectName = 'TABLE5')
    BEGIN
        INSERT INTO dbo.SQLObjectLog(databasename, eventtype,objectname, objecttype, sqlcommOR, loginname, eventdate)
        VALUES(@DatabaseName, @EventType, @ObjectName, @ObjectType, @SQLCommOR, @LoginName, GETDATE())
    END
END
...