Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何创建仅在新记录与旧记录不同时更新记录的触发器?_Sql Server 2008_Tsql_Triggers - Fatal编程技术网

Sql server 2008 如何创建仅在新记录与旧记录不同时更新记录的触发器?

Sql server 2008 如何创建仅在新记录与旧记录不同时更新记录的触发器?,sql-server-2008,tsql,triggers,Sql Server 2008,Tsql,Triggers,问题是创建一个触发器,该触发器仅在旧记录与新记录不同时更新记录。我能得到一些帮助吗?我甚至不知道除了 CREATE TRIGGER update_marketingliste ON marketing_list FOR UPDATE AS BEGIN SELECT * FROM INSERTED END 我不确定模式是什么,但下面的示例代码应该可以帮助您理解如何做到这一点 不计较 去 创建表测试(col1 int主键,col2 int) 去 在测试时创建触发器测试 而不是更新 作为

问题是创建一个触发器,该触发器仅在旧记录与新记录不同时更新记录。我能得到一些帮助吗?我甚至不知道除了

CREATE TRIGGER update_marketingliste
ON marketing_list FOR UPDATE
AS
BEGIN

    SELECT * FROM INSERTED
END

我不确定模式是什么,但下面的示例代码应该可以帮助您理解如何做到这一点

不计较 去

创建表测试(col1 int主键,col2 int) 去

在测试时创建触发器测试 而不是更新 作为 开始

结束 去

插入测试(col1、col2) 选择10,10 去

更新测试 设置col2=200 其中col1=10

挑选* 从测试

--这不会进行更新 更新测试 设置col2=200

跌落台试验
go

为什么只有在值为新值时才需要触发器进行更新?如果该值不是新的,那么它只是用相同的值替换该值。
            IF  EXISTS (
                                SELECT * 
                                FROM Deleted  del -- old value
                                INNER JOIN Inserted ins  -- new value
                                on del.col1 = ins.col1 
                                and del.col2 = ins.col2)
            BEGIN 

                PRINT 'No Update'
                RETURN  --if old value is same as new value dont update
            END 
            ELSE 
            BEGIN 
                            UPDATE t1
                            set col2  = i.col2
                            from dbo.test t1 
                            inner join inserted i 
                            on t1.col1 = i.col1 

            END