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 3625 게시물 읽기
No. 3625
트리거에 대해서 급 질문합니다 도와주세요...
작성자
김수동(sobakr)
작성일
2007-07-10 12:07ⓒ
2007-07-10 12:57ⓜ
조회수
3,001

아래의 Update 트리거를 만들었는데 하고자 하는 결과가 안나옵니다.


현재는 CODE가 "0" 으로 갱신되면 아래의 Update 트리거가 실행 되는데

제가 하고자 하는것은 


원래의 CODE 값이 "0" 이면  Update 트리거를 실행 시키고 싶습니다.


예)


원래의 CODE 값이 "0" 인 경우 [COUNT] = [COUNT] + @Qty 처리를 실행하고 싶습니다.


아래의 트리거는 CODE 값이 "0" 이 되었을때 실행 되는것 같습니다.


잘 아시는분 도움좀 부탁드립니다.




CREATE TRIGGER tgUpdateTrigger

ON [TEST]

FOR Update

AS

declare @NAPN varchar(16),

           @Qty decimal(9,2)


      SELECT

        @NAPN = upt.[NA-P/N],

        @Qty  = upt.[count],

        @code  = upt.[code]

      FROM inserted upt


IF UPDATE ([CODE])

   if @CODE= '0'

      begin

        update [TEST]

          set [COUNT] = [COUNT] + @Qty

        where NA-P/N]     = @NAPN

      end

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

위와 같은 Trigger를 만들었을 때 가장 문제가 되는 것은 
두개이상의 데이터를 업데이트 했을 때, @napn, @qty, @code의 데이터는 무엇으로 지정이 될까요? 

Trigger는 논리적 오류를 내포하고 있는 것 같습니다. 

Create Trigger tgUpdateTrigger
on Test
For Update
As
Begin
set nocount on

update a
 set a.count = a.count + b.count
from test A
 inner join inserted B
 ON A.[NA-P/N] = B.[NA-P/N]
 where b.code = '0'

set nocount off
End

.님이 2007-07-10 13:08에 작성한 댓글입니다. Edit

제가 질문을 잘못 한것 같습니다.

실제 트리거는 아래와 같이 작성 되어 있는데 .님이 지적하신데로 복수건을 갱신할때 문제가 생기네요
어떻게 수정하면 좋을지 조언좀 부탁하겠습니다.

아래는 실제 작성한 트리거 입니다.

IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'tgUpdateTrigger' AND type = 'TR')
DROP TRIGGER tgUpdateTrigger
GO

CREATE TRIGGER tgUpdateTrigger
ON [部品納入残]
FOR  Update
AS
declare @UpdateCnt int,
        @KaisyaSyubetu varchar(3),
        @ZigyousyoSyubetu varchar(3),
        @NAPN varchar(16),
        @Qty decimal(9,2),
        @Zyoutai tinyint
      SELECT
        @KaisyaSyubetu = upt.[会社種別],
        @ZigyousyoSyubetu = upt.[事業所種別],
        @NAPN = upt.[NA-P/N],
        @Qty  = upt.[数量],
        @Zyoutai  = upt.[状態]
      FROM inserted upt

IF UPDATE ([状態])
   if @Zyoutai  = '0'
      begin
        update [部品納入残(合計)]
          set [残数量] = [残数量] + @Qty,
              [更新年月日] = getdate()
        where [会社種別]   = @KaisyaSyubetu
          and [事業所種別] = @ZigyousyoSyubetu
          and [NA-P/N]     = @NAPN
      end
   if @Zyoutai  = '1'
     begin
         update [部品納入残(合計)]
          set [残数量] = [残数量] - @Qty,
              [更新年月日] = getdate()
        where [会社種別]   = @KaisyaSyubetu
          and [事業所種別] = @ZigyousyoSyubetu
          and [NA-P/N]     = @NAPN
      end
GO

김수동(sobakr)님이 2007-07-10 13:59에 작성한 댓글입니다.
이 댓글은 2007-07-10 14:00에 마지막으로 수정되었습니다.

역시 복수개 이상일때는 처음 예문과 같은 오류를 내포하고 있습니다. 

검증을 한 다음 사용하시기 바랍니다.


CREATE TRIGGER TGUPDATETRIGGER
ON [部品納入残]
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON
update A
 Set a.[残数量] = a.[残数量] + case when b.[状態] = '0' then  b.[残数量]
            when b.[状態] = '1' then  -1 * b.[残数量] end
  , a.[更新年月日] = getdate()
from [部品納入残(合計)] A
inner join Inserted B
on a.[会社種別]  = b.[会社種別]
and a.[事業所種別] = b.[事業所種別]
and a.[NA-P/N] = b.[NA-P/N]
SET NOCOUNT OFF
END

안된다면 msn이나 nate의 주소를 주십시오. ^^

.님이 2007-07-10 15:34에 작성한 댓글입니다.
이 댓글은 2007-07-10 15:36에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3628EM환경에서 쿼리가 훨씬 빨라요!!
김승일
2007-07-11
2122
3627시스템을 구축하려는데 어떻게 하면 될까요
조광수
2007-07-11
1883
3626정렬 문제입니다. [1]
sort
2007-07-11
2320
3625트리거에 대해서 급 질문합니다 도와주세요... [3]
김수동
2007-07-10
3001
3624프로시저 질문입니다. [4]
이형진
2007-07-10
3856
3621ODBC를 이용해서 대량쿼리를 DB서버로 날리는 좋은 방법 좀 알려 주세요.
김승일
2007-07-09
2266
3620MDB에서 Insert 하려는데 오류가 납니다(ASP)
신영환
2007-07-08
6520
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다