当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}}
答案 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
或子查询也可以实现同样的目的。