Sql server 多行SQL更新未按预期工作-选择与更新结果不同的结果
我有一个多行更新查询,它不能像我期望的那样工作。联接条件在SELECT语句中得到遵守,但在UPDATE语句中没有得到遵守 换句话说:我更改了1行,SELECT查询只显示1个预期结果。我将查询转换为UPDATE语句并运行它-表中的所有行都更改为相同的值-连接条件被完全忽略 我认为这是由于一个表变量,所以我使用了一个临时表,得到了相同的结果。我验证了我的连接条件正在比较相同的数据类型,这是一个内部连接。我不明白这为什么行不通Sql server 多行SQL更新未按预期工作-选择与更新结果不同的结果,sql-server,tsql,sql-server-2012,sql-update,inner-join,Sql Server,Tsql,Sql Server 2012,Sql Update,Inner Join,我有一个多行更新查询,它不能像我期望的那样工作。联接条件在SELECT语句中得到遵守,但在UPDATE语句中没有得到遵守 换句话说:我更改了1行,SELECT查询只显示1个预期结果。我将查询转换为UPDATE语句并运行它-表中的所有行都更改为相同的值-连接条件被完全忽略 我认为这是由于一个表变量,所以我使用了一个临时表,得到了相同的结果。我验证了我的连接条件正在比较相同的数据类型,这是一个内部连接。我不明白这为什么行不通 SELECT (o.SubTotal - o.OrderDisc
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
我用一个表变量执行了相同的查询-select有效,update始终更新所有行并忽略连接条件no joy
更奇怪的是,如果我把WHERE子句放在末尾,它就会被忽略!
如
我以前做过类似的查询,从来没有遇到过这个问题
当1行需要更改时,选择查询的输出作为示例
OrderSubTotal CommDue Status
----------------------------------
1285.20 38.56 MODIFIED
运行更新查询时:
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中的所有行都将被更新,我相信会使用相同的值。我为上述查询创建了一个附件ID。在您的更新中:
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
您告诉sql server更新名为AffiliateComm的表。但是,此表不包括在联接中
由于不知道这个表的模式,我只能猜测什么是对的,可能类似于:
UPDATE a
SET [OrderSubtotal]=(o.SubTotal - o.OrderDiscounts), [CommDue]=t.CommRate*(o.SubTotal - o.OrderDiscounts),[Status]='MODIFIED'
FROM AffiliateComm A
INNER JOIN bvc_Order o
ON o.OrderNumber = a.OrderNumber
INNER JOIN #tbl t
ON o.OrderNumber = t.OrderNumbe
什么是附属通信?它不在您的任何联接条件中。^我只是在查看类似构造的旧查询-您是对的,AffiliateComm不在联接条件中-这一定是问题所在-产生歧义,但需要这样做。我在重新安排,我是太空学员!我将连接条件更改为以下内容-它现在可以工作。从bvc_Order o内部连接AffiliateComm ac ON ac.OrderNumber=o.OrderNumber内部连接tbl t ON t.OrderNumber=ac.OrderNumber
UPDATE a
SET [OrderSubtotal]=(o.SubTotal - o.OrderDiscounts), [CommDue]=t.CommRate*(o.SubTotal - o.OrderDiscounts),[Status]='MODIFIED'
FROM AffiliateComm A
INNER JOIN bvc_Order o
ON o.OrderNumber = a.OrderNumber
INNER JOIN #tbl t
ON o.OrderNumber = t.OrderNumbe