多行SQL更新无法按预期工作 - SELECT结果与UPDATE结果不同

时间:2016-06-25 17:50:25

标签: sql-server tsql sql-server-2012 sql-update inner-join

我有一个多行更新查询,它不像我期望的那样工作。 JOIN语句中遵循SELECT条件,但UPDATE语句中未遵循SELECT条件。

换句话说:我更改了1行,UPDATE查询只显示了1行(如预期的那样)。我将查询转换为JOIN语句并运行它 - 表中的所有行都更改为相同的值 - 完全忽略JOIN条件。

我认为这是由于一个表变量,所以我使用了临时表并获得了相同的结果。我确认我的INNER JOIN条件正在比较相同的数据类型(它是SELECT (o.SubTotal - o.OrderDiscounts) AS OrderSubTotal, t.CommRate * (o.SubTotal - o.OrderDiscounts) AS CommDue, 'MODIFIED' AS "Status" FROM bvc_Order o INNER JOIN #tbl t ON o.OrderNumber = t.OrderNumber )。我不知道为什么这不起作用

UPDATE

转换为UPDATE AffiliateComm SET [OrderSubtotal] = (o.SubTotal - o.OrderDiscounts), [CommDue] = t.CommRate * (o.SubTotal - o.OrderDiscounts), [Status] = 'MODIFIED' FROM bvc_Order o INNER JOIN #tbl t ON o.OrderNumber = t.OrderNumber 语句:

WHERE

我用表变量完成了相同的查询 - (选择工作,更新总是更新所有行并忽略JOIN条件)没有快乐。

更奇怪的是,如果我在最后加上一个WHERE o.OrderNumber = t.OrderNumber 条款,它就会被忽视! 如在

SELECT

之前我已经完成过这样的查询,从未遇到过这个问题。

OrderSubTotal CommDue Status ---------------------------------- 1285.20 38.56 MODIFIED 查询的输出(例如,当1行需要更改时)

UIViewController

当我运行更新查询时:

  

(1行(s)受影响)< -This是临时表(或变量),插入1行,因为它应该正确

     

(5行(s)受影响)< - 这是受UPDATE影响的行数不正确(应为1)

SQL Server 2012中是否存在错误的设置?如果你内部加入一行有1行,那么结果集不可能有超过1行,对吗?

我感到困惑。

2 个答案:

答案 0 :(得分:1)

据推测,你打算这样:

UPDATE ac
    SET [OrderSubtotal] = (o.SubTotal - o.OrderDiscounts),
        [CommDue] = t.CommRate*(o.SubTotal - o.OrderDiscounts),
        [Status] = 'MODIFIED'  
FROM AffiliateComm ac INNER JOIN
     bvc_Order o
     ON ac.OrderNumber = o.OrderNumber INNER JOIN
     #tbl t
     ON o.OrderNumber = t.OrderNumber ;

换句话说,AffiliateComm需要以某种方式加入到其他表中。否则,AffiliateComm中的所有行都会更新,我相信具有相同的值。我为上述查询编了AffiliateId

答案 1 :(得分:1)

在您的更新中:

('key', 'v1', 'v2')

您告诉sql server更新名为AffiliateComm的表。但是,此表格不包含在您的加入中。

不知道这张桌子的架构,我只能猜对了,可能是这样的:

{{1}}