MS T-SQL UPDATE Statement



预先感谢您的反馈。

我正在尝试更新连接条件的列。

我可以使用 SELECT返回我想要的列,但是 UPDATE语句什么都不做。

我尝试了这两种方式(见下文(。示例两个嵌套了SELECT语句,该语句自行起作用,返回12行,但是当我尝试更新列时,我会返回0行或返回2行。2行不是SELECT语句中的行。如果需要的话,我稍后再将那只兔子追逐到洞中,但我想对此进行一些反馈。

查询#1:

BEGIN TRAN
UPDATE lot_group        
SET lot_group_code = 'Finished'
FROM inv_mast_lot i
LEFT JOIN lot_group l ON i.lot_group_uid = l.lot_group_uid
LEFT JOIN line o  ON i.inv_mast_uid = o.inv_mast_uid
LEFT JOIN header h ON o.order_no = h.order_no
LEFT JOIN inventory m ON i.inv_mast_uid = m.inv_mast_uid
WHERE 
    l.lot_group IS NULL
    AND o.cancel_flag <> 'Y'
    AND o.company_no = 'db1'
    AND o.complete <> 'Y'
    AND o.delete_flag <> 'Y'
    AND h.projected_order <> 'Y'
    AND m.item_id = 'part_1')
ROLLBACK/COMMIT

查询#2:

BEGIN TRAN      
UPDATE lot_group 
SET lot_group_code = 'Finished'
WHERE EXISTS (SELECT l.lot_group_code, m.item_id, l.lot_group_uid   
              FROM inv_mast_lot i
              LEFT JOIN lot_group l ON i.lot_group_uid = l.lot_group_uid
              LEFT JOIN line o ON i.inv_mast_uid = o.inv_mast_uid
              LEFT JOIN header h ON o.order_no = h.order_no
              LEFT JOIN inventory m ON i.inv_mast_uid = m.inv_mast_uid
              WHERE l.lot_group IS NULL
                AND o.cancel_flag <> 'Y'
                AND o.company_no = 'db1'
                AND o.complete <> 'Y'
                AND o.delete_flag <> 'Y'
                AND h.projected_order <> 'Y'
                AND m.item_id = 'part_1') 
ROLLBACK/COMMIT 

首先,我将更改更新语句以使用其余查询中使用的别名。接下来,查看查询是否返回任何有用的东西,您可以嵌入评论的选择。这样,您只需运行选择,直到确定要更新的数据确保更新然后正确运行。另一种技术是运行选择,运行更新,然后每次运行选择滚动,直到获得正确的结果为止。我更喜欢第一次做,直到我很确定自己选择要更新的正确记录为止。然后转到第二种方法,以确保更新发生在我设想的情况下。

       UPDATE l    
            SET lot_group_code = 'Finished'
--select l.lot_group_code, *
            FROM inv_mast_lot i
            LEFT JOIN lot_group l
                ON i.lot_group_uid = l.lot_group_uid
            LEFT JOIN line o 
                ON i.inv_mast_uid = o.inv_mast_uid
            LEFT JOIN header h
                ON o.order_no = h.order_no
            LEFT JOIN inventory m 
                ON i.inv_mast_uid = m.inv_mast_uid
            WHERE l.lot_group IS NULL
                AND o.cancel_flag <> 'Y'
                AND o.company_no = 'db1'
                AND o.complete <> 'Y'
                AND o.delete_flag <> 'Y'
                AND h.projected_order <> 'Y'
                AND m.item_id = 'part_1')

这只是搞砸了。

没有目的更新左联接的目标。
无效意味着没有什么可更新的。

您通过将条件放在其中。

最新更新