|
|
1
2
如果您想对alter/create/drop上下文(即在同一个事务中)执行一些操作,甚至阻止alter/create/drop,那么您应该查看 DDL Triggers . 如果你想做点什么 之后 在一个单独的事务中,alter/create/drop可以在不减慢原始DDL的情况下自由地执行一些冗长的处理,然后您应该研究 Event Notifications . 请注意,事件通知实际上可以远程传递,因此您可以将整个公司组中的所有DDL事件捕获到一个中央存储库中。 |
|
|
2
3
CREATE TRIGGER tddl_storedprocevents ON DATABASE
FOR
CREATE_PROCEDURE,ALTER_PROCEDURE,DROP_PROCEDURE
AS
INSERT INTO AUDIT_TABLE(EventType, SQLCommand, etc)
SELECT EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(512)')
, EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)')
, etc
/*
EVENTDATA()
SELECT EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(512)')
, EVENTDATA().value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime')
, EVENTDATA().value('(/EVENT_INSTANCE/SPID)[1]', 'nvarchar(4)')
, EVENTDATA().value('(/EVENT_INSTANCE/ServerName)[1]', 'nvarchar(512)')
, EVENTDATA().value('(/EVENT_INSTANCE/LoginName)[1]', 'nvarchar(512)')
, EVENTDATA().value('(/EVENT_INSTANCE/LoginType)[1]', 'nvarchar(512)')
, EVENTDATA().value('(/EVENT_INSTANCE/SID)[1]', 'nvarchar(512)')
, EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'nvarchar(512)')
, EVENTDATA().value('(/EVENT_INSTANCE/IsPooled)[1]', 'nvarchar(1)')
etc
*/
DROP TRIGGER tddl_storedprocevents ON DATABASE
我建议您阅读关于eventData()返回的XML对象的文档,如果您现在不这样做的话。 希望它有帮助。 |