如何将插入查询的OUTPUT用于另一个插入查询

时间:2018-01-23 08:53:30

标签: sql sql-server

我正在尝试使用子查询将2条记录插入到2个表中,但它会给我一个语法错误。

  

第15行,第1行,第4行   关键字“INSERT”附近的语法不正确。   Msg 102,Level 15,State 1,Line 4   ')'附近的语法不正确。

我正在尝试执行的查询是

INSERT INTO [Files] ([FileTransformationId],[FileTypeEnumId]) 
VALUES 
(
   (INSERT INTO [FileTransformations] OUTPUT INSERTED.FileTransformationId DEFAULT VALUES),
   2
)

这可能吗?

1 个答案:

答案 0 :(得分:1)

您需要先将输出存储在变量中。所以,我认为你想要这样的东西:

DECLARE @variable TABLE (value INT)--change type depending on your need

INSERT INTO [FileTransformations] 
OUTPUT INSERTED.FileTransformationId INTO @variable(value)
VALUES(.....)

INSERT INTO [Files] ([FileTransformationId],[FileTypeEnumId]) 
SELECT value, 2 FROM @variable

有关使用输出变量和How do I use an INSERT statement's OUTPUT clause to get the identity value?的更多信息,请参阅Insert into table from table variable?,然后从该表变量中插入。

另一个选项,如果你只想要最后插入的记录的id是使用scope_identity()。所以你可以把上面的内容写成:

INSERT INTO [FileTransformations] 
VALUES(.....)

INSERT INTO [Files] ([FileTransformationId],[FileTypeEnumId]) 
VALUES scope_identity(), 2