2012-06-21 2 views
0

업데이트 할 때 Column 값을 확인하고 싶습니다. 일치하는 항목이 다른 테이블에 삽입되는 경우. 내 테이블 : FirstTable조건이있는 특정 열의 트리거

SecondTable

내 트리거 :

CREATE TRIGGER tr_test 
ON test1 
FOR UPDATE 
AS 
    SET nocount ON 

    IF (Update(sname)) 
     DECLARE @Name NVARCHAR 

    DECLARE @id INT 

    SET @[email protected]@IDENTITY 
    SET @Name=(SELECT sname 
       FROM test1 
       WHERE id = @id) 

    IF(@Name = 'Paras') 
     BEGIN 
      INSERT INTO test2 
         (loginfo) 
      VALUES  ('success') 
     END 

그리고 내 업데이트 쿼리는 다음과 같습니다

update Test1 set Sname='Paras' where ID=1 

나는 일이되는이 업데이트 쿼리 아무것도 실행하지

. Test2 테이블이 비어 있습니다. 문제가 @@IDENTITY 인 것 같지만 확실하지 않습니다. 감사합니다.

CREATE TRIGGER tr_test 
ON test1 
FOR UPDATE 
AS 
    SET nocount ON 

    IF (Update(sname)) 
     DECLARE @Name NVARCHAR 

    DECLARE @id INT 

    SET @id=(select id from inserted) 
    SET @Name=(SELECT sname 
       FROM inserted 
       WHERE id = @id) 

    IF(@Name = 'Paras') 
     BEGIN 
      INSERT INTO test2 
         (loginfo) 
      VALUES  ('success') 
     END 

을하지만, 위의 실패 업데이트가 UPDATE가 많은 행과 일치하는 경우, 사용이 존재하는 많은 행을 업데이트 할 수 있습니다,이 작업을 수행하는 것이 좋습니다 :

+1

@@ IDENTITY : 시스템 기능이 ret입니다. 마지막으로 삽입 된 ID 값을 반환합니다 .http : //msdn.microsoft.com/en-us/library/ms187342.aspx –

+0

오, 그 실수입니다. 그래서 어떻게 업데이트 된 컬럼'ID'를 찾았나요? –

+0

또한 SQL Server의 트리거는 문 ** 당 한 번 ** (행당 한 번) 호출되지 않습니다. 한 번에 50 개의 행을 삽입 한 INSERT 문을 호출 할 수 있습니다. 당신은 그 사실을 다룰 필요가 있습니다. 당신의 방아쇠가 단 하나의 줄만 취급한다고 가정하지 마십시오! –

답변

1

이 시도

CREATE TRIGGER tr_test 
ON test1 
FOR UPDATE 
AS 
    SET nocount ON 

    IF(EXISTS(select * From inserted where sname = 'Paras')) 
     BEGIN 
      INSERT INTO test2 
         (loginfo) 
      VALUES  ('success') 
     END 

inserted 테이블을 UPDATE의 새 값이있는 테이블의 이름입니다. deleted table은 UPDATE의 이전 값이되는 테이블의 이름입니다.

+0

어떤 ID가 선택됩니까? 업데이트 된 열 ID를 선택하고 싶지만 어떻게 알 수 있습니까? 어떤 아이디어입니까? –

+0

'inserted' 테이블에서'ID'를 얻을 수 있습니다. 하지만 얻은'ID'를 기반으로'test1' 테이블을 재 쿼리 할 필요가 없습니다. UPDATE 문의 업데이트 된 값과 오래된 값은 모두'inserted' 및'deleted' 테이블에 있습니다. –

+0

감사합니다 .I test2' 테이블은 여전히 ​​비어 있습니다. 어떤 데이터도'Test2'에 삽입되어 있지 않습니다. –