2013-05-21 1 views
0

상황에 따라 테이블에 열이 10 개 있습니다. 프로그램에서 5 열을 삽입하고 5 열에 대해 트리거를 만들고 싶습니다. 가능한가? 그리고 그렇다면 어떻게 할 수 있습니까?트리거에 삽입하는 동안 데이터를 업데이트 한 다음 삽입하십시오.

COL1 COL2 COL3 col4 COL5 col6 col7 col8 col9 그것을 만들기 때문에 당신은 트리거 locsal 변수를 사용하지 말아야

CREATE TRIGGER Fill_Trigger 
    ON DB 
    AFTER INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for trigger here 
    DECLARE @COL6 INT 
    DECLARE @COL7 INT -- and so on. 


    SET @COL6 = (SELECT COL1 FROM inserted) * (SELECT COL2 FROM inserted) 
    SET @COL7 = (SELECT COL3 FROM inserted) * (SELECT COL4 FROM inserted) 

    --Is it possible to do the following? 
    UPDATE inserted SET COL6 = @COL6 
    UPDATE inserted SET COL7 = @COL7 
END 
GO 

답변

1

col10 "하나의 행은"또한

, 나는 당신이 가정 KeyColumn이라고하는 기본 키. 그리고 당신의 테이블은 "DB"라고 불립니다.

CREATE TRIGGER Fill_Trigger 
    ON DB 
    AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE DB 
    SET 
     Col6 = I.COL1 * COL2, 
     Col7 = I.COL3 * COL4 
    FROM 
     DB 
     JOIN 
     INSERTED I ON DB.KeyColumn = I.KeyColumn; 
END 
GO 

그러나, 일부 열은 다른 열을 기반으로, 나는 트리거

COMPUTED columns를 사용하지 않을
CREATE TABLE MyTable (
    KeyColumn ..., 
    Col1 ..., 
    Col2 ..., 
    Col3 ..., 
    Col4 ..., 
    Col5 ..., 

    Col6 AS Col1 * Col2, 
    Col7 AS Col3 * Col4, 
    Col8 AS ... 

    ); 
+0

나는 일부러이 부분은 "당신은 트리거 때문에에 locsal 변수를 사용하지 말아야 얻을 그것은 그것을 "단 하나의 행"으로 만든다 "라고 설명 할 수 있겠는가? 이 트리거에서 많은 일을하고 있기 때문에 변수를 사용해야합니다. 나는 CLR 함수를 호출하고있다. –

+1

2 개 이상의 행을 삽입하면 변수가 가져올 값을 알 수 없습니다. 그것은 어떤 행에서 올 것입니다. 그리고 이것은 방아쇠가 너무 복잡해 보입니다. – gbn

+0

OP의 샘플은 단지 예일뿐입니다. 여기에 약간 복잡한 계산이 있습니다. –

관련 문제