我该如何重写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/