在具有条件的特定列处触发

时间:2012-06-21 04:55:28

标签: sql sql-server sql-server-2005

我想在update时检查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 @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但不确定。谢谢。

1 个答案:

答案 0 :(得分: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  

inserted表是UPDATE的新值所在的表的名称,deleted table是UPDATE的旧值所在的表的名称