아래와 같은 트리거문을 이용하여 DDL문의 히스토리를 남기도록 하려고 합니다.
얘는 현재 날린 DDL 문만 INSERT 하게되는데요. 혹시 수정되기 전의 프로시저 문을 불러와서 넣어줄 수 있을까여?
검색이 잘 안되서요. ㅠㅠ
CREATE TRIGGER [DDLTrigger]
ON DATABASE
FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE
AS
BEGIN
SET NOCOUNT ON;
dECLARE
@EventData XML = EVENTDATA();
DECLARE
@ip VARCHAR(32) =
(
SELECT client_net_address
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
);
INSERT dbo.DDLEvents
(
EventType,
EventDDL,
EventXML,
DatabaseName,
SchemaName,
ObjectName,
HostName,
IPAddress,
ProgramName,
LoginName
)
SELECT
@EventData.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)'),
@EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(MAX)'),
@EventData,
DB_NAME(),
@EventData.value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(255)'),
@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)'),
HOST_NAME(),
@ip,
PROGRAM_NAME(),
SUSER_SNAME();
END
Comment 1
-
초짜해커
2015.02.02 16:56
이게 아마 트리거에서 EVENTDATA가 캡쳐될 즈음이 이미 프로시져가 수정 된 후 일겁니다.
그래서 저는
일단 모든 SP를 로그 테이블에 적재 해 놓고 시작합니다.