0

更新時に列の値を確認したいのですが、一致する場合は別のテーブルに挿入します。マイ テーブル:最初のテーブル

セカンドテーブル

私のトリガー:

CREATE TRIGGER tr_test
ON test1
FOR UPDATE
AS
    SET nocount ON

    IF ( Update(sname) )
      DECLARE @Name NVARCHAR

    DECLARE @id INT

    SET @id=@@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、よくわかりません。ありがとうございます。

4

1 に答える 1

1

これを試して:

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 が多くの行に一致する場合、上記は失敗します。EXISTS を使用します。

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  

insertedtable は、UPDATE の新しい値がdeleted格納されるテーブルの名前です。table は、UPDATE の古い値が格納されるテーブルの名前です。

于 2012-06-21T05:03:29.943 に答える