2017-06-22 33 views
1

我需要检测列和表上的重命名操作。 我可以看到在此查询alterdropcreate操作:如何检测表和列的重命名操作?

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中的表或列,我不能在此查询检测。还有另一种方法可以做到吗?

问候。

回答

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/

+0

论哪个表?在哪个事件?整个数据库上的 –

+0

(我编辑答案) –