2012-08-28 4 views
2

테이블 중 하나에 트리거를 쓰고 있습니다. 내가하고 싶은 일은 삽입 된 필드 중 하나를 사용하여 다른 테이블 열을 업데이트하고 싶습니다.트리거에 삽입 된 값 사용

CREATE TRIGGER [dbo].[Trigger_TestTrigger] 
ON [dbo].[TableA] 
FOR INSERT 
AS 

BEGIN 
    SET NoCount ON 
    DECLARE @variable UNIQUEIDENTIFIER 
    SELECT @variable = TableB.colA1 FROM TableB WHERE (TableB.colB1 = INSERTED.colA1) 
    IF (@variable != INSERTED.colA2) 
    BEGIN 
     UPDATE TableB SET colB4 = INSERTED.colA2 WHERE TableB.colB1 =INSERTED.colA1 
    END 
END 

그러나이 트리거를 데이터베이스에 생성하면 오류가 발생합니다. 오류 : 일반적으로 INSERTED

"INSERTED.colA1" could not be bound. 
"INSERTED.colA2" could not be bound. 

은 삽입 된 valuse 있습니다. 그래서, 내가 어떻게 테이블 "TableA"에 삽입 한 값을 가져야할까요? 이런 식으로 사용할 수 없다면 올바른 방법은 무엇입니까?

당신은

SELECT @variable = TableB.colA1 
FROM TableB 
    inner join inserted ON TableB.colB1 = INSERTED.colA1 

inserted 하나 개 이상의 행을 포함 할 수 있다는 것을 알고 있어야 다른 테이블처럼 삽입 처리해야합니다, 그래서 이것은 실제로 당신이 시간을 모두 원하는 결과를 제공하지 않습니다

답변

4

+0

그래서, 이것을하는 더 좋은 방법이 있습니까? 방금 삽입 한 값을 데이터베이스에 가져 오려면. 다른 테이블을 업데이트해야하기 때문에. 그리고 내 업데이트도 Inserted를 사용해야합니다. Intellisence는 거기에 삽입 된 필드도 제공하지 않습니다. :( –

+1

INSERTED.colA2를 TableB.colA1에 삽입하고 비교하는 단일 UPDATE 쿼리가 있습니다. – podiluska

2

당신 INSERTED를 테이블로 처리해야합니다.

관련 문제