2011-07-26 3 views

답변

1

유효한 SQL 문이 있습니다.

INSERT 할 때 SELECT에서 변수와 리터럴을 사용할 수 있습니다. 기본적으로 다음과 같이 말합니다. "각 행을 inserted에서 가져 와서이 두 변수의 field3 및 field5에 대해 각각 단일 값을 사용하여 모든 행에 적용합니다."

"맞는지"묻는 것처럼 들립니다. 비즈니스 논리 나 스키마에 달려 있습니다. 아마도 원본 테이블에 column3 및 column5가 없을 것입니다. 아마도 그들은 존재하지만 귀하의 myTable과 관련이 없거나 관련이없는 것일 수 있습니다.

방아쇠의 정의 게시 게시 제안.

+0

감사합니다. +1을 내게 :-) 시간 제한이 제거되면 이미 답변으로 표시됩니다. 하! – dotnetnewb

+0

@dotnetnewb 방아쇠를 게시 하시겠습니까? –

1

방아쇠를 당길 수있는 이유에 대해 이야기 해 봅시다. 감사 트리거가 있고 작업이 발생한 날짜를 추가하려면 먼저 날짜를 현재 날짜로 설정 한 다음 삽입 된 모든 레코드가 감사 테이블에 추가 될 때 그 날짜를 사용하여 올바른 작업을 수행하는지 확인하십시오 날짜가 초기 테이블의 필드가 아닌 경우. 트리거에서 변수는 종종 기본 테이블에 저장되지 않은 일종의 시스템 정보를 가져 오거나 계산을 기반으로 일부 변수의 값을 설정하는 데 사용됩니다. 삽입 된 테이블의 모든 레코드가 동일한 값을 갖도록하려면이 작업을 수행해야합니다.

반면에 레코드가 하나만 있다고 생각하는 방식으로 변수를 설정하는 경우 트리거가 잘못되어 수정해야합니다. 일반적으로 이러한 유형의 실수는 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) 

은 잘못된 것입니다. 그러나 날짜 필드를 설정하면 전체 일괄 처리 작업 날짜가 동일하기 때문에 변수를 잘 사용할 수 있습니다.

+0

다시 감사합니다. HLGEM :-) – dotnetnewb

관련 문제