1

我需要检测列和表的重命名操作。我可以在这个查询中看到alter,drop和操作:create

DECLARE   @filename nvarchar(1000);

SELECT   @filename = cast(value as nvarchar(1000))
FROM   ::fn_trace_getinfo(default)
WHERE   traceid = 1 and   property = 2;

SELECT   *
FROM   fn_trace_gettable(@filename, default) AS ftg 
INNER   JOIN sys.trace_events AS te ON ftg.EventClass = te.trace_event_id  
left outer join sys.all_objects o on o.name = ftg.ObjectName
order by EventSequence DESC;

但是,当有人在 MSSQL Management Studio 上重命名表或列时,我无法检测到此查询。还有另一种方法吗?

问候。

4

1 回答 1

0

您可以创建数据库触发器。可用事件列表:([sys].[events]ALTER_COLUMN事件)

来自 msdn 的示例:

CREATE TRIGGER safety   
ON DATABASE   
FOR DROP_SYNONYM  
AS   
   RAISERROR ('You must disable Trigger "safety" to drop synonyms!',10, 1)  
   ROLLBACK  
GO  
DROP TRIGGER safety  
ON DATABASE;  
GO  

另一个例子:https ://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/

于 2017-06-22T14:23:07.223 回答