|
트리거 님이 쓰신 글 :
: 트리거에서 update는 어케하는지 아시는분 갈켜주시면 감사..
: 일반 테이블에서 레코드가 있고..( insert/ delete 는 이해가 되는데..)
: 기존 레코드의 값이 변경 되었을때 기존의 값과 새로 변경 된 값이 트리거로
: 반영이 되어야 할텐데..
: 읽어주셔서 대단히 감사합니다..
: 아시는분 꼭좀 부탁합니다..
안녕하세요. 정진후라고 합니다.
우선 mssql에서 트리거를 사용하실 때 알아두셔야 할 개념이
inserted,와 deleted라는 가상 테이블입니다.
가상 테이블이라고 하기는 좀 뭣하지만 update문이 적용이 될 때 메모리
상에서 확보되는 공간이라고 생각하시면 될 것 같고요.
이름에서도 예상이 되시겠지만 update문이 실행이되면,
deleted테이블에는 update문이 실행되기 이전의 값이 들어가고,
inserted테이블에는 바뀌어진 값이 들어가게 됩니다.
간단한 예를 들어본다면
CREATE TRIGGER [UPDATE_ON_sometavle] ON dbo.somedb
FOR UPDATE
AS
DECLARE @charfield char(5), @intfield int, @timefield datetime
SELECT @charfield = somefield1, @intfield = somefield2, @timefield = somefield3
FROM inserted
//deleted 테이블의 값도 물론 위와 같은 방식으로 변수를 지정하고 참조 가능합니다.
//----------------------이건 일례 입니다.
IF @timefield IS NULL
BEGIN
SET @timefield = getdate()
END
IF @intfield = 0
BEGIN
UPDATE sometable
SET somefield2 = @intfield,
somefield3 = @timefield
WHERE somefield1 = @charfield;
END
뭐 조금은 간단한 예이지만 개략적인 내용은 아시겠지요?
설명이 부족한 부분이 있으면 다시 질문해주세요.
아는데까지 다시 답변 드리겠습니다.
|