首页 > 解决方案 > Sql server 触发器根据主键更新值

问题描述

以下是我的查询。

 CREATE TRIGGER MyTrigger ON CUSTOMERS
    AFTER INSERT
    AS

    if exists ( select * from CUSTOMERS t 
        inner join inserted i on i.name<>t.name or i.age<>t.AGE or i.address<>t.address or i.salary<>t.SALARY
        and i.id = t.id)
    begin
        UPDATE c SET c.name = i.name,    c.age = i.age     c.address=i.address FROM CUSTOMERS as c INNER JOIN inserted i ON c.id = i.id 
    end   go

在这个更新语句中,我想更新所有 id 匹配的列和行。但是当我尝试插入旧行时,id 匹配的地方会更新,并且新记录会被插入

标签: sqlsql-server

解决方案


如果我是对的,您可以尝试使用内部连接进行更新,如下所示。

CREATE TRIGGER MyTrigger ON CUSTOMERS
AFTER INSERT
AS
if Exists (select * from CUSTOMERS t 
    inner join inserted i on i.id=t.id
    and i.age=t.AGE 
    and i.[address]=t.[address]
    and i.salary=t.SALARY
    and i.id <> t.id)
begin
 UPDATE c
 SET c.name = i.name,  
     c.age = i.age
     --...and so on
 FROM CUSTOMERS as c
 INNER JOIN inserted i ON c.id <> i.id              
end

推荐阅读