sql - SQL 查询未对临时表中的所有记录执行
问题描述
我有一个 SQL 查询,它应该使用在第二个表中找到的记录来更新一个表。目前,我有一个临时表,它应该搜索每个匹配的记录,UPDATE
主表,但是当它应该在所有 23 个匹配记录上执行时,查询只在 4 个匹配记录上执行。
我的查询可能有问题吗?如果我使用INNER JOIN
or JOIN
,我会得到结果
(4 rows affected)
如果我使用 a LEFT JOIN
,我会收到错误消息:
消息 515,级别 16,状态 2,第 87 行
无法将值 NULL 插入列“ChangeRequestId”,表“dbo.NSTest_RVCR”;列不允许空值。更新失败。
下面是UPDATE
我正在运行的查询
UPDATE c
SET c.ChangeRequestId = a.Id
FROM NSTest_RVCR c
JOIN dbo.NSChangeRequests a ON a.Id = c.ChangeRequestId
JOIN #tempExtractedTPNumber b ON b.ExtractedTP = a.TPNumber
JOIN NSReportVtest d ON d.Id = c.ReportVersionId
编辑:
如果我在下面的查询中使用LEFT JOIN
with ,我会得到结果: (1025 行受影响)但它仍然只更新完全相同的 4 条记录。ISNULL()
UPDATE c
SET c.ChangeRequestId = ISNULL(a.Id,0)
FROM NSTest_RVCR c
LEFT JOIN dbo.NSChangeRequests a ON a.Id = c.ChangeRequestId
LEFT JOIN #tempExtractedTPNumber b ON b.ExtractedTP = a.TPNumber
LEFT JOIN NSReportVtest d ON d.Id = c.ReportVersionId
可以在这里找到我最初遇到问题的原始问题:Update multiple records in table by using a reference table SQL Server
解决方案
推荐阅读
- c - WideCharToMultiByte 随机失败,出现错误 122/ERROR_INSUFFICIENT_BUFFER
- google-apps-script - Google Script 有两个用于编辑时的触发器。我可以删除“简单”的吗?
- oracle - 为时间戳字段插入 SYSTIMESTAMP
- flutter - 如何显示从时间戳经过的时间?
- selenium - 使用 Robot Framework 处理随机按钮
- java - 创建基于位置的应用程序而不保存坐标
- javascript - 每个模块只有一个默认导出允许使用 Navbar 在 React Native 上出错
- angular - 添加确认对话框作为按钮的添加属性指令
- ruby-on-rails - rake db:migrate:不兼容的库版本 postgres
- laravel - 如何使用 Vue 和 Laravel 避免警告“直接改变道具”