我有一个触发器,用于记录数据库中表的元数据的更改。 它将日志保存在另一个名为 tblMonitorChange 的表中。 当我重命名表时,不会生成触发器。
这是触发器:
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)创建TestTable,2)将其重命名为TestTable2,然后3)向其添加一列。
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
但是没有记录重命名。
那么如何监控重命名表呢?
任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用RENAME事件替换Rename_table事件吗?代码正常工作
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'