首页 > 解决方案 > SQL 查询未对临时表中的所有记录执行

问题描述

我有一个 SQL 查询,它应该使用在第二个表中找到的记录来更新一个表。目前,我有一个临时表,它应该搜索每个匹配的记录,UPDATE主表,但是当它应该在所有 23 个匹配记录上执行时,查询只在 4 个匹配记录上执行。

我的查询可能有问题吗?如果我使用INNER JOINor 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 JOINwith ,我会得到结果: (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

标签: sqlsql-serverjoinsql-updateleft-join

解决方案


推荐阅读