Как получить изменения схемы SQL Server, особенно изменения имени столбца - PullRequest
1 голос
/ 22 октября 2010

Я использую триггер для отслеживания изменений DDL, но когда я меняю имя столбца из SQL Server Management Studio, триггер не работает?

create TRIGGER trgLogDDLEvent ON DATABASE
  FOR DDL_DATABASE_LEVEL_EVENTS
FOR
AS
DECLARE @data XML
SET @data = EVENTDATA()
IF @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)')
<> 'CREATE_STATISTICS'
INSERT INTO db_trc_DDLChangeLog
(
EventType,
ObjectName,
ObjectType,
tsql,
RecDate,
HostName
)
VALUES (
@data.value('(/EVENT_INSTANCE/EventType)[1]',
'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/ObjectName)[1]',
'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/ObjectType)[1]',
'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]',
'nvarchar(max)'),
getdate(),
 HOST_NAME()
) ;
GO

--select * from db_trc_DDLChangeLog
--create table db_trc_DDLChangeLog
--(
--EventType varchar(max),
--ObjectName varchar(max),
--ObjectType varchar(max),
--tsql varchar(max),
--RecDate datetime,
--HostName varchar(max)
--)

1 Ответ

0 голосов
/ 22 октября 2010

Вы не будете получать события специально для изменений столбцов. Вместо этого вы получите событие ALTER_TABLE, указывающее, что таблица изменилась.

Когда вы говорите «консоль SQL Server», вы имеете в виду Management Studio? Если это так, взгляните на SQL, который он генерирует, чтобы изменить вашу таблицу. Это может быть создание новой таблицы, копирование данных в нее, удаление старой таблицы и переименование новой таблицы, так что вы увидите ряд событий, таких как CREATE_TABLE и затем DROP_TABLE.

...