我有一个多行更新查询,它不像我期望的那样工作。 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行,对吗?
我感到困惑。
答案 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}}