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 回答