1

トリガーを使用して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)
--)
4

1 に答える 1

0

列の変更に特化したイベントは取得されません。代わりにALTER_TABLE、テーブルが変更されたことを示すイベントを受け取ります。

SQL Server コンソールと言うのは、Management Studio のことですか? もしそうなら、あなたのテーブルを変更するために生成しているSQLを見てください。CREATE_TABLE新しいテーブルを作成し、そこにデータをコピーし、古いテーブルを削除して新しいテーブルの名前を変更しているため、やのような多くのイベントが表示されますDROP_TABLE

于 2010-10-22T13:16:04.867 に答える