【问题标题】:monitor renaming a table in a sql server database with trigger使用触发器监视重命名 sql server 数据库中的表
【发布时间】:2017-11-01 12:38:00
【问题描述】:

我有一个触发器,它记录对数据库中表的元数据的更改。 它将日志保存在另一个名为 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 

但尚未记录重命名。

那么如何监控重命名表呢?

任何帮助将不胜感激。

【问题讨论】:

    标签: sql-server database-trigger table-rename


    【解决方案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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多