如何使用SQL Server中的OUTPUT将多列插入表中?

时间:2014-01-13 17:09:00

标签: sql sql-server output-clause

向下滚动到OUTPUT部分。它给了我一个红色的下划线。我想在InsertedCreditDebitAdjustmentIDs表中插入与{InvoNum}一起插入@CreditDebitAdjustment的ID。我该怎么做呢?

DECLARE @InsertedCreditDebitAdjustmentIDs TABLE
(
  ID INT,
  InvoiceNumber VARCHAR(50)
)

INSERT INTO @CreditDebitAdjustment ( col1, col2, ...)
SELECT  @ImportedFileID AS '@ImportedFileID', 
  tbl.col.value('(Purpose/text())[1]', 'VARCHAR(500)') AS Purpose,
  etc.
FROM @XML.nodes('/CreditDebitAdjustments/CreditDebitAdjustment') AS tbl (col)
OUTPUT INSERTED.CreditDebitAdjustmentID, etc. INTO @InsertedCreditDebitAdjustmentIDs 

2 个答案:

答案 0 :(得分:5)

在您OUTPUT clause陈述某事后,将INSERT INTO置于其后......

INSERT INTO TableName (Column1, Column2, Column3.....)
OUTPUT inserted.Column1 , inserted.Column2 INTO @TableName
SELECT  Column1, Column2, Column3.....
FROM Table_name

另外,我建议您将XML ShreddingINSERT操作保留在单独的语句中。你的XML中的任何hanky panky可能会让你做很多清理工作:)

分别将碎片插入临时表,一旦满意,然后插入目标表。

答案 1 :(得分:1)

它是:

TARGET (insert/update etc.)
OUTPUT (direct or into another table)
SOURCE (select/values etc.)

所以你只需要切换顺序:

INSERT dbo.tablename(column1, column2, ...)
OUTPUT INSERTED.col1, INSERTED.col2, ... [INTO ...]
SELECT @var1, col1, etc. FROM elsewhere...

有关示例,请参阅OUTPUT Clause (Transact-SQL) documentation

相关问题