更新查询如下:
UPDATE Cust_Site
SET Cust_Site.Name= H.Name
FROM Header H
INNER JOIN Cust_Site S
ON H.Name <> S.Name
AND H.ID = S.ID
AND H.Country = S.Country;
每当我运行它时,我会影响150行。但即使我使用COMMIT,Cust_Site中的行也不会发生任何变化。
可能是什么问题?
答案 0 :(得分:3)
尝试输出update语句的inserted和deleted行,以查看更改内容:
UPDATE Cust_Site
SET Cust_Site.Name= H.Name
OUTPUT deleted.Name, inserted.Name, inserted.*
FROM Header H
INNER JOIN Cust_Site S
ON H.ID = S.ID
AND H.Country = S.Country
AND H.Name <> S.Name
通过这种方式,您可以排除查询实际更新具有相同值的内容的可能性。
在运行查询之前,请执行@@Trancount
以防万一您有任何未结交易。
确保您在同一个数据库中运行验证select
。
<强>更新强>
刚才有一件事发生在我身上:
两个表中的列是否都声明了相同的类型? (即VARCHAR而非固定长度)
您确定其中任何一个中的数据都不包含会导致UPDAte stmt名称不同的前导/尾随空格吗?比较时可以修剪它们吗?
答案 1 :(得分:0)
我会将此查询编写为相关子查询,如下所示,但如果子查询为每个cust_site行返回多行,则可能会失败并显示错误。如果确实失败了,那么这可能就是为什么你没有得到你期望的结果的线索。
UPDATE Cust_Site
SET Name = (SELECT H.Name FROM Header H WHERE Name <> S.Name AND ID = S.ID AND Country = S.Country)
FROM Cust_Site S;
答案 2 :(得分:0)
尝试删除
ON H.Name <> S.Name
并将条件移动到查询的末尾,因此:
WHERE H.Name <> S.Name
看看你是否得到了相同的结果。