방아쇠를 당길 수있는 이유에 대해 이야기 해 봅시다. 감사 트리거가 있고 작업이 발생한 날짜를 추가하려면 먼저 날짜를 현재 날짜로 설정 한 다음 삽입 된 모든 레코드가 감사 테이블에 추가 될 때 그 날짜를 사용하여 올바른 작업을 수행하는지 확인하십시오 날짜가 초기 테이블의 필드가 아닌 경우. 트리거에서 변수는 종종 기본 테이블에 저장되지 않은 일종의 시스템 정보를 가져 오거나 계산을 기반으로 일부 변수의 값을 설정하는 데 사용됩니다. 삽입 된 테이블의 모든 레코드가 동일한 값을 갖도록하려면이 작업을 수행해야합니다.
반면에 레코드가 하나만 있다고 생각하는 방식으로 변수를 설정하는 경우 트리거가 잘못되어 수정해야합니다. 일반적으로 이러한 유형의 실수는 select가 아닌 values 절에서 발생하는 다른 테이블에 대한 삽입으로 끝납니다.
올바른지 알아보기위한 핵심은 삽입 된 테이블에 여러 레코드가있는 경우 어떤 일이 발생하는지 살펴 보는 것입니다.
제가 예를 들어 보겠습니다 : 삽입 된 테이블에 1000 개 개의 레코드와 20 개의 다른 client_ids가있을 수 있기 때문에 CLIENT_ID에 대한 변수의 값을 설정이 경우
declare @client_id int
declare @date datetime
select @client_id = client_id from inserted
set @date = getdate()
insert table2 (client_id, action_date)
values (@client_id, @date)
은 잘못된 것입니다. 그러나 날짜 필드를 설정하면 전체 일괄 처리 작업 날짜가 동일하기 때문에 변수를 잘 사용할 수 있습니다.
감사합니다. +1을 내게 :-) 시간 제한이 제거되면 이미 답변으로 표시됩니다. 하! – dotnetnewb
@dotnetnewb 방아쇠를 게시 하시겠습니까? –