【问题标题】:How do I insert multiple columns into a table using OUTPUT in SQL Server?如何在 SQL Server 中使用 OUTPUT 将多个列插入到表中?
【发布时间】:2014-01-13 17:09:00
【问题描述】:

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

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 

【问题讨论】:

标签: sql sql-server output-clause


【解决方案1】:

把你的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 中的任何手帕都会让您有很多清理工作要做:)

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

【讨论】:

  • 如果我想做一个 where 子句怎么办?这不起作用:OUTPUT INSERTED.RetailImportOrderID, INSERTED.ErrorMessage WHERE INSERTED.ErrorMessage = '没有任何改变。订单 100% 重复。 INTO @DeletablePODuplicates
  • 如果我从上面删除 where 子句,它确实有效。
  • 你不能在 OUTPUT 中使用 WHERE 子句,如果你想限制你应该在你的 select 语句中使用 where 子句的行
  • @Rj。或者一旦您通过输出将数据插入到您的 TableName 中,您可以在再次从中选择数据时使用 where 子句。 OUTPUT 子句不允许您使用 where 子句限制行。
【解决方案2】:

是这样的:

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

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多