Sql server 多行SQL更新未按预期工作-选择与更新结果不同的结果

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语句中得到遵守,但在UPDATE语句中没有得到遵守

换句话说:我更改了1行,SELECT查询只显示1个预期结果。我将查询转换为UPDATE语句并运行它-表中的所有行都更改为相同的值-连接条件被完全忽略

我认为这是由于一个表变量,所以我使用了一个临时表,得到了相同的结果。我验证了我的连接条件正在比较相同的数据类型,这是一个内部连接。我不明白这为什么行不通

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