如何在sqlserver中通过插入子查询更新列

vsdwdz23  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(369)

我正在按子查询更新表列。。。但子查询恰好是插入表达式,它的语法无效。
那么如何做到这一点:

UPDATE table
SET column = (
  INSERT otherTable (otherColumn)
  OUTPUT inserted.ID 
  VALUES ('foo')
)

从功能的Angular 来看≈等于有效查询:

UPDATE table
SET column = (
  Select ot.ID
  From otherTable ot
  where ot.otherColumn = table.anotherOne
)
dauxcl2d

dauxcl2d1#

在sqlserver中有一个可组合dml的概念。这允许使用如下语法

INSERT INTO Table2
SELECT O.ID
FROM 
 (
  INSERT otherTable (otherColumn)
  OUTPUT inserted.ID 
  VALUES ('foo')
 )  O
WHERE O.ID <> 1

但它非常有限,不允许将 OUTPUT 从句到另一从句 UPDATE .
如果尝试,则返回错误消息

UPDATE table0
SET column0 = ( 
SELECT O.ID
FROM 
 (
  INSERT otherTable (otherColumn)
  OUTPUT inserted.ID 
  VALUES ('foo')
 )  O
)


对于不是insert语句行的直接源的select语句,不允许嵌套insert、update、delete或merge语句。
您需要捕获 OUTPUT 子句,并在 UPDATE .
或者可能只是使用 SCOPE_IDENTITY() 如果 inserted.ID 是一个 IDENTITY 列,您总是插入一行。

vvppvyoh

vvppvyoh2#

您需要使用连接执行更新。

UPDATE t
SET t.[column] = ot.Id
FROM [table] t
    JOIN [otherTable] ot
        ON ot.otherColumn = t.anotherone;

相关问题