我该如何重写SQL更新语句子查询以仅选择一行?

我已经尝试过TOP 1,但这只是将所有值更新为TOP 1选择值。

这是我所拥有的:

BEGIN TRAN
    UPDATE DBO.TRACKINGPROD
    SET LEV8 = (SELECT SUBSTRING(LEV2, 1,
        (SELECT CHARINDEX('-', LEV2) - 1))
        FROM DBO.TRACKINGPROD)
ROLLBACK TRAN


结果:


消息512,第16级,状态1,第2行
子查询返回的值超过1。
当子查询遵循=,!=,,> =或将子查询用作表达式时,不允许这样做。


该语句已终止。

表格样本:

列2列= A1011-000-XXXXX AHN-XXXXX诉XXXXX牧场
Lev8 =空白

我的最终目标是用同一行中Lev2中破折号左侧的所有内容更新Lev8。

最佳答案

我认为您可以通过单个查询来做到这一点:

UPDATE DBO.TRACKINGPROD
     SET LEV8 = SUBSTRING(LEV2, 1, CHARINDEX('-', LEV2) - 1));


您也可以使用LEFT()代替:

UPDATE DBO.TRACKINGPROD
     SET LEV8 = LEFT(LEV2, CHARINDEX('-', LEV2) - 1);

关于sql - 我该如何重写SQL更新语句子查询以仅选择一行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53340315/

10-10 02:38