SQL Server: можно ли установить триггер на изменение сохраненного процесса? - PullRequest
0 голосов
/ 10 ноября 2009

Каждый раз, когда сохраненный процесс изменяется или создается, я хочу записать это в триггер, чтобы потом что-то делать.

Могу ли я сделать это в SQL Server 2008?

Спасибо. --Beemer

Ответы [ 2 ]

3 голосов
/ 10 ноября 2009
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

Я рекомендую прочитать документацию об объекте xml, возвращаемом EVENTDATA (), если вы этого еще не сделали.

Надеюсь, это поможет.

2 голосов
/ 10 ноября 2009

Если вы хотите сделать что-то в контексте ALTER / CREATE / DROP (т. Е. Внутри той же транзакции) и даже запретить ALTER / CREATE / DROP, то вам следует изучить DDL Triggers .

Если вы хотите что-то сделать после ALTER / CREATE / DROP, в отдельной транзакции и иметь возможность выполнять длительную обработку без замедления исходного DDL, тогда вам следует изучить Уведомления о событиях .

Обратите внимание, что уведомления о событиях могут фактически доставляться удаленно, поэтому вы можете захватывать все события DDL из всей корпоративной группы в один центральный репозиторий.

...