0

更新查询如下:

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 中的行也完全没有改变。

可能是什么问题?

4

3 回答 3

3

尝试为更新语句输出插入和删除的行,看看有什么变化:

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 的名称看起来不同的前导/尾随空格吗?比较时可以修剪它们吗?

于 2013-05-22T20:20:08.610 回答
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;
于 2013-05-22T19:28:22.613 回答
0

尝试删除

ON   H.Name <> S.Name

并将条件移动到查询的末尾,因此:

WHERE   H.Name <> S.Name

看看你是否得到相同的结果。

于 2013-05-22T19:35:33.833 回答