database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 4345 게시물 읽기
No. 4345
아래 트리거에 대한 추가 질문입니다.
작성자
학생
작성일
2008-07-23 00:07
조회수
4,908

일단... 아래 제가 써놓은 질문입니다.


A라는 테이블에 (B,C) 두개의 필드가 있습니다.

 

B라는 테이블도 A와 완전히 같은 스키마로 구성되어 있구요.

 


 

A가 UPDATE 되었을 때 B에 업데이트 이전의 데이터들을 입력할려고 합니다.

 


 

트리거를 이용할려고 하는데

 

 

제가 하고자 하는 것은 UPDATE 쿼리가 수행 되었을 때 입력하는 것 외에도

 


 

UPDATE 쿼리는 수행되었지만 컬럼에 변화가 있을 때만 입력하게 하는 것입니다.

 


 

즉 B,C 필드에 각각 1 값이 들어가 있는데

 


 

제가 UPDATE A SET B = 1, C = 1 쿼리를 수행했을 경우에는 B 테이블이 입력이 되질 않고

 


 

UPDATE A SET B = 1, C = 2 쿼리처럼 둘 중 하나 값 혹은 둘다 모두 변경되었을 때만 B 테이블에

 


 

입력하는 크리거를 짜려고 합니다. 다소 복잡한데요.

 


 

트리거를 어떻게 구성해야 될까요? 답변 좀 부탁드리겠습니다.


-----------------------------------------------------------------------------------------


위와 같은 질문에 대한 답을 받아서 아래와 같은 트리거로 구성했을 경우...


CREATE TRIGGER UTR_TEST 

ON A_TABLE FOR UPDATE

AS 

BEGIN 

SET NOCOUNT ON 

     IF UPDATE(A) OR UPDATE(B)  BEGIN 

        INSERT B_TABLE 

             SELECT * FROM DELETED

     END

END


업데이트 되었을 경우 입력이 정확히 되긴합니다.


그러나 만약에 원래 A필드에 ABCD 라는 값이 있을 경우


제가 UPDATE A_TABLE SET A = 'ABCD' 라고 수행하면 1ROW 가 업데이트 되었다고는 하지만


같은 값이므로 B_TABLE 에는 값이 입력되는 것을 원치 않거든요.


근데 위 트리거 생성문은 같은 값으로 UPDATE 되더라도 입력되는 상황이 발생하네요.


어떻게 해야될까요? 다시한번 답변 좀 부탁드려요.

이 글에 대한 댓글이 총 2건 있습니다.

INSERTED와 조인을 해서 값을 비교하면 원하시는 결과를 얻으실수 있습니다. 

대강의 답만 드리겠습니다. 

학생이라는 걸 보니 공부하시고 있다는 추측을 하며 ..

여리님이 2008-07-23 10:17에 작성한 댓글입니다. Edit

이정도 하면 될꺼 같은데요??ㅎㅎ
아래에 PRM_KEY는 각 Table의 Unique Key(Primary Key 같은)가 되겠습니다.

CREATE TRIGGER UTR_TEST
ON A_TABLE FOR UPDATE
AS
SET NoCount ON

if UpDate(A) OR UpDate(B)
Begin
    INSERT B_TABLE
    SELECT *
    FROM DELETED  AS A
    JOIN INSERTED AS B  ON  A.PRM_KEY = B.PRM_KEY
    WHERE
       A.A != B.A
    OR A.B != B.B
End

SET NoCount OFF

항해자™(likethis79)님이 2008-07-29 08:36에 작성한 댓글입니다.
이 댓글은 2008-07-29 08:39에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
4349두 날짜 사이에 날짜별, 주차별, 월별 구하는 쿼리좀 도와주세요. [1]
이상용
2008-07-23
7238
4348근접한 수 찾기... [3]
남용욱
2008-07-23
5375
4346영문자를 한글과 같은 2byte로 읽는 방법? [1]
조중규
2008-07-23
4781
4345아래 트리거에 대한 추가 질문입니다. [2]
학생
2008-07-23
4908
4344속도 튜닝 질문 입니다. ㅜㅜ [1]
초보입니다.
2008-07-22
5836
4343Java Enterprise 무료세미나 2008.08.02
김하늘
2008-07-22
4096
4342업데이트 트리거 질문입니다. [1]
학생
2008-07-22
4832
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다