Как вставить несколько столбцов в таблицу с помощью OUTPUT в SQL Server?

Прокрутите вниз до части OUTPUT. Это дает мне красное подчеркивание. Я хочу вставить в InsertedCreditDebitAdjustmentIDs таблица, идентификатор вставлен в @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 

2 ответа

Решение

Положить ваши 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 может оставить вам много работы:)

сделайте измельчение отдельно, вставьте результаты во временную таблицу, после чего вставьте в целевые таблицы.

Идет:

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).

Другие вопросы по тегам