2016-06-21 3 views
0

사용 확인 : 내가있는 기록을 추적하는 트리거를 사용하고SQL 서버 트리거 : 아래 예를 들어, 특정 업데이트 문은 내가 큰 테이블에 상대적으로 간단한 업데이트 일련의 명령문을 사용해야

UPDATE Table1 
SET Col1 = 'A' 
WHERE Col2 = '1' 

UPDATE Table1 
SET Col1 = 'A' 
WHERE Col3 = 'X' 

UPDATE Table1 
SET Col1 = 'B' 
WHERE Col2 = '2' 

업데이트되었습니다. 트리거의 테이블 출력에서 ​​특정 업데이트 구문이 업데이트 결과를 확인하는 방법은 무엇입니까?

트리거 스크립트에서 update 문 옆에있는 변수 세트를 참조 할 수 있습니까?

+0

'DROP TRIGGER'에서 촬영,'PROCEDURE'을 만듭니다. –

+1

'DBCC INPUTBUFFER'를 검색하십시오. – Arvo

+0

'WHERE'이 아니라'WHERE' ... –

답변

1

경우에 따라 테이블을 업데이트 한 정확한 진술을 찾고 싶을 수 있습니다. 또는 DELETE 문 (실행 한 사람)의 WHERE 절이 어떻게 생겼는지 확인할 수 있습니다.

DBCC INPUTBUFFER은 이러한 종류의 정보를 제공 할 수 있습니다. DBCC INPUTBUFFER 명령을 사용하여 트리거를 시작한 정확한 명령을 찾는 트리거를 테이블에 만들 수 있습니다.

다음과 같은 트리거 코드는 SQL Sever 2000에서 작동합니다 (SQL Server 7.0에서는 트리거 내에 테이블을 만들 수 없으므로 수동으로 테이블을 만들어 트리거 내부에서 사용해야합니다). 이 코드는 SQL 문, 로그인 이름, 사용자 이름 및 현재 시간 만 표시하지만이 정보가 추적/감사 목적으로 테이블에 기록되도록 코드를 변경할 수 있습니다.

CREATE TRIGGER TriggerName 
ON TableName 
FOR INSERT, UPDATE, DELETE AS 
BEGIN 
SET NOCOUNT ON 

DECLARE @ExecStr varchar(50), @Qry nvarchar(255) 

CREATE TABLE #inputbuffer 
(
    EventType nvarchar(30), 
    Parameters int, 
    EventInfo nvarchar(255) 
) 

SET @ExecStr = 'DBCC INPUTBUFFER(' + STR(@@SPID) + ')' 

INSERT INTO #inputbuffer 
EXEC (@ExecStr) 

SET @Qry = (SELECT EventInfo FROM #inputbuffer) 

SELECT @Qry AS 'Query that fired the trigger', 
SYSTEM_USER as LoginName, 
USER AS UserName, 
CURRENT_TIMESTAMP AS CurrentTime 
END 

위의 코드에서, 각각 테이블의 이름과 트리거 이름으로 TableNameTriggerName를 교체하고 당신은 삽입/업데이트/삭제 데이터에 의해 처음으로 다음 트리거를 작성하여 트리거를 테스트 할 수 있습니다.

here!

+1

당신이 링크 한 해결책을 설명해 주시겠습니까? 리소스가 내일 오프라인으로 전환 될 수 있으며 이로 인해 귀하의 링크가 깨질 수 있습니다. 답안에 링크 된 페이지의 요점을 포함하십시오. 이것이 대답 대신에 주석이 될 것이라면, 주석으로 게시하십시오. – Pred

+0

링크는 OP가 찾고있는 솔루션입니다. DBCC INPUTBUFFER를 사용하여 명령을 식별합니다. –

+0

앞으로는이 스레드를 읽을 수있는 유일한 사람이 OP가 아닙니다. 귀하의 게시물이 SO에 대한 답변의 최소 요구 사항을 충족하지 않습니다. 자세한 내용은 [도움말]의 [답변]을 참조하십시오. 감사합니다. @Pred. – Pred