2

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

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 
4

2 回答 2

6

在你陈述一些谎言之后把你的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 Shredding和您的INSERT操作放在单独的语句中。您的 XML 中的任何手帕都可以让您进行大量清理工作:)

单独进行粉碎将结果插入到临时表中,一旦满意然后插入到目标表中。

于 2014-01-13T17:11:38.533 回答
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 子句 (Transact-SQL) 文档

于 2014-01-13T17:11:46.380 回答