C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[6232] Re:MS SQL 트리거에서 Help me
정진후 [] 3886 읽음    2001-03-21 13:32
트리거 님이 쓰신 글 :
: 트리거에서 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

뭐 조금은 간단한 예이지만 개략적인 내용은 아시겠지요?
설명이 부족한 부분이 있으면 다시 질문해주세요.
아는데까지 다시 답변 드리겠습니다.

+ -

관련 글 리스트
6231 MS SQL 트리거에서 Help me 트리거 2400 2001/03/21
6232     Re:MS SQL 트리거에서 Help me 정진후 3886 2001/03/21
6237         해결~~감사합니다(내용무) 트리거 2374 2001/03/21
6235         답변감사합니다.. 그런데.. 트리거 2281 2001/03/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.