尝试在SQL中更新另一个表 - 返回"多个值"错误

Dan*_*ton 3 sql sql-server-2008

我知道这看起来像是重复的,但我一直在研究类似的问题,但我仍然无法克服这个错误.

我无法理解为什么此SQL UPDATE查询返回"子查询返回的值超过1"错误.

UPDATE ph
SET ph.manufacturerPartNumber = t.DocID
FROM #tmp t
INNER JOIN PartHeader ph ON ph.partID = t.partID
Run Code Online (Sandbox Code Playgroud)

涉及的数据如下.

SELECT t.partID,t.DocID,ph.partID,ph.manufacturerPartNumber
FROM #tmp t
INNER JOIN PartHeader ph ON ph.partID = t.partID
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我不明白"超过1的价值"来自哪里.来自t的每个partID在ph中恰好具有1个partID.

我也尝试了以下相同的错误.

UPDATE PartHeader
SET PartHeader.manufacturerPartNumber = (SELECT t.DocID
FROM #tmp t
INNER JOIN PartHeader ph ON ph.partID = t.partID)
Run Code Online (Sandbox Code Playgroud)

我确定我错过了一些简单的东西,但我肯定会错过它.

谢谢你的帮助,丹

Bri*_*dge 6

由于您确定您编写的SQL很好,我想建议您可能在表上有一个ON UPDATE/AFTER UPDATE触发器,该触发器不会被写入以处理一次更新的多行.

这可以通过禁用任何与更新相关的触发器并尝试再次运行更新来快速验证.

编辑:

如果您在测试时禁用了触发器,请确保稍后重新启用它.您无法保证更新只会影响一行,因此您需要修复触发器 - 假设您需要触发器的任何进程(可能是审计?)继续.