문제

내가 만드는 트리거를 추적하는 방법 절차를 텍스트 ALTERed.

내부 데이터베이스 DDL 트리거 그것은 접속이 가능한 현재 절차의 텍스트를 통해 /EVENT_INSTANCE/TSQLCommand.

후에도 조사 EVENTDATA(), 지 않았다,그 값을 포함한 이전의 정의 절차기 전에 ALTER.

가를 검색할 수 있는 방법을 이전처럼 텍스트는 어떻게 그것이 가능한 액세스하는 삭제되는 값에서 DML 를 사용하여 트리거 DELETED 테이블?

create trigger trgDDLAuditQuery
on  database
for     alter_procedure
as 
begin
    set nocount on;

    declare @data xml
    set @data = EVENTDATA()

    insert  dbo.tblQueryAudit(ObjectName, TSQLCommand)
    select  @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(256)'), 
        --; Only gets currently changed procedure text, not previous one
        @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)')
end
GO
도움이 되었습니까?

해결책

트리거가 실행한 후에는 변경되었다,그래서 지금까지 내가 말할 수 없음에 액세스하기 전에""값입니다.EVENTDATA()정의된다고 규정되어 있지 아니한"이".결과적으로,당신은 단지 현재 값을 기록에서 로그를 보실 수 있습니다.그러나는 경우를 미리 채우도록 명령

    INSERT INTO dbo.tblQueryAudit
            (ObjectName, TSQLCommand)
    SELECT
        o.Name,m.definition
        FROM sys.objects                 o
            INNER JOIN sys.sql_modules   m ON o.object_id=m.object_id
        WHERE type='P'

당신이 사용할 수 있습 트리거 아직 완전한 그림을 그의 모든 변경합니다.귀하의 로그에 있는 모든 이전 버전뿐만 아니라 현재 버전은 각각의 절차입니다.사용할 수 있습니 내 버전의 트리거(아래 참조)에,당신은에 액세스 할 수 있습니다 다른 열을 sys.체 및 sys.sql_modules,다음과 같:

uses_ansi_nulls
uses_quoted_identifier
is_schema_bound
null_on_null_input
principal_id

될 수 있는 편리한 로그 뿐입니다.다른 버전:

CREATE trigger trgDDLAuditQuery
on  database
for             alter_procedure
as 
begin
    set nocount on;

    DECLARE @EventData      xml
    SET @EventData=EVENTDATA()

    INSERT INTO dbo.tblQueryAudit
            (ObjectName, TSQLCommand) --hope you have  datetime column that defaults to GETDATE()
        SELECT
            o.Name,m.definition
            FROM sys.objects                 o
                INNER JOIN sys.sql_modules   m ON o.object_id=m.object_id
            WHERE o.Name=@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(max)')
                --modify as necessary AND type='P'

end
GO
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top