更新查询如下:
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 中的行也完全没有改变。
可能是什么问题?
更新查询如下:
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 中的行也完全没有改变。
可能是什么问题?
尝试为更新语句输出插入和删除的行,看看有什么变化:
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 的名称看起来不同的前导/尾随空格吗?比较时可以修剪它们吗?
我会将此查询编写为相关子查询,如下所示,但是如果子查询为每个 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;
尝试删除
ON H.Name <> S.Name
并将条件移动到查询的末尾,因此:
WHERE H.Name <> S.Name
看看你是否得到相同的结果。