通过选择语句更新多列表格

时间:2018-12-10 14:46:30

标签: sql sql-server tsql sql-update

我正在尝试从select语句更新表,但没有任何行受到影响。如果我运行select语句,我会得到结果,所以我不确定。 在示例中,我缩小了where子句。 任何帮助将不胜感激。

我的选择

select 
    a.Code,
    a.ItemGroup,
    a.Pack,
    a.bar_code,
    WHStockLink,WHUseInfoDefs,
    b.[iBinLocationID],
    c.cBinLocationDescription,
    ucIIWBin1,
    WHPackCode,
    WHBarCode,
    IdWhseStk
from
    WhseStk b 
    join StkItem a on a.StockLink = WHStockLink
    inner join _btblBINLocation c on c.idBinLocation = b.iBinLocationID 
where 
    WHWhseID = 3 and 
    IdWhseStk = 1003000221089 
order by WHStockLink

我的更新

update WhseStk
    set ucIIWBin1 = t1.cBinLocationDescription
    from (
        select
            a.Code,
            a.ItemGroup,
            a.Pack,
            a.bar_code,
            WHStockLink,
            WHUseInfoDefs,
            b.[iBinLocationID],
            c.cBinLocationDescription,
            ucIIWBin1,
            WHPackCode,
            WHBarCode,
            IdWhseStk
        from  
            WhseStk b 
            join StkItem a on a.StockLink = WHStockLink
            join _btblBINLocation c on c.idBinLocation = b.iBinLocationID 
        --where WHWhseID = 5 and c.idBinLocation = b.iBinLocationID
         ) t1
    where WHWhseID = 5

如果我对其进行调整,则每一行都会受到相同值的影响。

我要使用的实际上是使用股票链接和Whse进行匹配,并在同一张表(即ucIIWBin1, ucIIWBin2, ucIIWBin13)中填充了3个新的用户定义字段,它们是条形码的Bin Description(与另一个表连接)并从该表中打包。

哪个:

Bin:

库存:

1 个答案:

答案 0 :(得分:1)

在标记问题tsql时,我假设您正在使用sql-server。

在这种情况下,您的JOIN语句中可以有UPDATE个。根据您显示的查询,语法如下:

UPDATE a
SET a.ucIIWBin1 = c.cBinLocationDescription
FROM WhseStk a
INNER JOIN StkItem b ON b.StockLink = a.WHStockLink
INNER JOIN _btblBINLocation c on c.idBinLocation = a.iBinLocationID 
WHERE a.WHWhseID = 5

正如您提到的查询范围缩小时一样,您可能需要改写上面的示例(特别是,您提到需要更新3个字段,而在代码中仅显示一个字段)。