SQL Server 2008中非相关表的条件UPDATE

时间:2019-01-28 13:03:05

标签: sql sql-server tsql

当2个ID与historicTable匹配(一个公司ID和另一个地区ID)与tempTable匹配时,我试图更新SUBG_ROT(包含员工数据的8k条记录),这是一个临时表,我想更新的数据(colx),否则(该列保持空白),它应该将数据从同一历史表中的数据从coly复制到Update historicTable set SUBG when h.id1 = t.id1 and h.id2 = t.id2 then h.SUBG = t.SUBG else h.id1 = h.SUBG 。我当时在考虑一个JOIN / INNER JOIN,但是我根本无法获得结构,所以我用条件更新做了一个存储过程,但是我不知道如何调用临时表。有关逻辑/代码的任何提示都将受到赞赏,我从SQL Server开始,所以我有点头绪。

在我看来,代码应该这样做:

CREATE PROCEDURE updateHistoric
AS
UPDATE dbo.historicTable 
    SET SUBG_ROT = CASE
                    WHEN id1 = temptable.id1 AND id2 = temptable.id2 
                        THEN SUBG_ROT = temptable.SUBG_ROT
                        ELSE SUBG_ROT = AREA
                        END
GO

这是代码

{{1}}

1 个答案:

答案 0 :(得分:1)

您可以尝试使用OUTER APPLY,例如follownig。

UPDATE t 
SET    t.subg_rot = CASE 
                    WHEN o.subg_rot IS NOT NULL THEN o.subg_rot 
                    WHEN t.subg_rot IS null then t.area 
                    ELSE t.subg_rot
                  END 
FROM   dbo.historictable t 
       OUTER APPLY (SELECT TOP 1 subg_rot 
                    FROM   temptable t2 
                    WHERE  t1.id1 = t2.id1 
                           AND t1.id2 = t2.id2)o 

注意:使用LEFT JOIN或子查询也可以实现同样的目的。