SQL Server:我可以在更改存储过程时设置触发器吗?

Bee*_*Guy 1 sql-server triggers stored-procedures sql-server-2008

每当存储过程被更改或创建时,我都想在触发器中捕获它以便随后执行一些操作。

我可以在 SQL Server 2008 中执行此操作吗?

谢谢。——比默

Dan*_*n S 5

在数据库上创建触发器 tddl_storedprocevents
为了
CREATE_PROCEDURE、ALTER_PROCEDURE、DROP_PROCEDURE
作为
INSERT INTO AUDIT_TABLE(事件类型、SQLCommand 等)
  选择 EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(512)')
       , EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)')
             , ETC

/*
事件数据()

选择 EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(512)')
     , EVENTDATA().value('(/EVENT_INSTANCE/PostTime)[1]', '日期时间')
     , 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
*/

将触发器 tddl_storedprocevents 删除到数据库

如果您现在还没有阅读有关 EVENTDATA() 返回的 xml 对象的文档,我建议您阅读该文档。

希望能帮助到你。