2017-11-01 12 views
0

データベースのテーブルのメタデータの変更を記録するトリガがあります。 という名前の別のテーブルにログを保存します。tblMonitorChangeテーブルの名前を変更すると、トリガーは生成されません。トリガを使用してSQL Serverデータベースのテーブルの名前を変更するモニタ

USE ReportServer 
GO 
CREATE TRIGGER trgMonitorChange 
ON DATABASE 
FOR CREATE_TABLE, ALTER_TABLE, DROP_TABLE , RENAME_TABLE 
AS 
set nocount on 
declare @EventType varchar(100) 
declare @SchemaName varchar(100) 
declare @ObjectName varchar(100) 
declare @ObjectType varchar(100) 
SELECT 
@EventType = EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(max)') 
,@SchemaName = EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(max)') 
,@ObjectName = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)') 
,@ObjectType = EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(max)') 
-- Is the default schema used 
if @SchemaName = ' ' select @SchemaName = default_schema_name from sys.sysusers u join sys.database_principals p 
         on u.uid = p.principal_id where u.name = CURRENT_USER 
insert into tblMonitorChange 
     select @EventType, @SchemaName, @ObjectName, @ObjectType, getdate(), SUSER_SNAME() 

これは1上のサンプル出力である)、2)、次いで3 TestTable2に名前を変更し、それに列を追加すること)のTestTable作成:

このがトリガです。

EventType  SchemaName ObjectName ObjectType EventDate  

CREATE_TABLE dbo   TestTable TABLE  2017-11-01 10:55:44.590 
ALTER_TABLE dbo   TestTable2 TABLE  2017-11-01 14:36:07.543 

ただし、名前の変更は記録されていません。

どのようにしてテーブル名の変更を監視できますか?

ご協力いただければ幸いです。

答えて

1

Rename_tableイベントをRENAMEイベントに置き換えることはできますか?以下のコードは正常に動作します

CREATE TRIGGER ddl_trigger_alter ON DATABASE 
WITH EXECUTE AS 'dbo' 
FOR CREATE_TABLE, ALTER_TABLE, DROP_TABLE,RENAME 
AS 

    DECLARE @ddltriggerxml XML; 
    SELECT @ddltriggerxml = EVENTDATA(); 
    SELECT @ddltriggerxml; 

GO 

CREATE TABLE TEST(ID INT) 
go 
sp_rename 'test_new','test' 
関連する問題