sql - SQLServer 2008 中非相关表的条件更新
问题描述
我正在尝试更新historicTable
(包含员工数据的 8k 条记录),当 2 个 ID 匹配(一个公司 ID 和另一个区域 ID)时tempTable
,这是一个包含我要更新的数据的临时表(SUBG_ROT
),否则(该列保留空),它应该从colx
同coly
一个历史表中复制数据。我正在考虑一个 JOIN/INNER JOIN 但我根本无法获得结构,所以我做了一个带有条件更新的存储过程,但我不知道如何调用临时表。感谢您对逻辑/代码的任何提示,我从 SQL Server 开始,所以我有点无能为力。
在我看来,代码应该这样做:
Update historicTable set SUBG when h.id1 = t.id1 and h.id2 = t.id2 then h.SUBG = t.SUBG else h.id1 = h.SUBG
这是代码
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
解决方案
您可以尝试使用OUTER APPLY
like 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
或子查询。
推荐阅读
- javascript - pdfmake js 有问题。表格边框不起作用
- c++ - 构造变量的未初始化变量警告
- asp.net-core - ASP.NET Core 5 MVC:全局自定义授权(.net5.0)
- node.js - 尝试在 Heroku 上部署 Node.js Discord 机器人时出现“SyntaxError: Unexpected identifier”错误
- solidity - 如何检查函数是否从特定地址调用
- xml - Splunk:如何在 SimpleXML 的调色板表达式中使用变量?
- android - 自定义 PlaceAutoCompleteFragment 小部件以在提示面板的右侧添加箭头
- python - 如何从列表中添加边缘标签?
- javascript - Lottie mocking 在 react-testing-library 中不起作用
- boto3 - 是否有将 Quicksight 仪表板下载为 pdf 的功能?