Да, это возможно, используя встроенную функцию EVENTDATA()
.Эта функция возвращает значение XML, которое содержит информацию о событии, которое сработало триггером DDL, например, время события, тип события и т. Д.
Вы можете использовать эту функцию внутри триггера DDL, например, так::
CREATE TRIGGER dbchanges_ddl
ON <database name here>
FOR DDL_TABLE_EVENTS -- alter, create and drop table
AS
DECLARE @data XML,
@EventType nvarchar(100);
SET @data = EVENTDATA();
SET @EventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)');
/*
Currently, we can examin the content of @EventType to know if
the statement that fired the trigger is an alter, create or a drop statement,
However we have no information about what TABLE is mensioned in that statement.
To get that information, we need to parse the actual SQL statement.
We get the statement using TSQLCommand:
*/
DECLARE @Statement nvarchar(4000);
SET @Statement = @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(4000)');
-- Now you can check if the command refers to the table you want to monitor or not,
-- by looking for the name of the table inside the statement.
IF @statement LIKE '%dbchanges%'
BEGIN
-- Do whatever you want here...
END
GO