【问题标题】:TSQL INSERT INTO SELECT - display rowsTSQL INSERT INTO SELECT - 显示行
【发布时间】:2014-07-17 06:48:49
【问题描述】:

是否可以显示我通过此查询插入了哪些行:

INSERT INTO dbo.Table (Col1, Col2, Col2)
    (SELECT
        Col1,
        Col2,
       'Something modified',
    FROM dbo.Table
    WHERE Col10 = 66)

获取全新行及其 PrimaryKey 值等很重要,而不仅仅是 Col1、Col2、Col3

【问题讨论】:

标签: sql tsql select insert


【解决方案1】:

OUTPUT 子句现在是你的朋友了:

INSERT INTO steam.DocumentGeographies (Col1, Col2, Col3)
OUTPUT inserted.*
    (SELECT
        Col1,
        Col2,
       'Something modified',
    FROM dbo.Table
    WHERE Col10 = 66)

您可以通过使用INTO 子句指定目标表或将查询包装为子查询来插入OUTPUT 的结果:

INTO 子句

当您想将相同的数据插入两个表时,这很有用。您始终可以在 OUTPUT 子句中列出所需的文件(inserted.Col1,inserted.Col2)

INSERT INTO steam.DocumentGeographies (Col1, Col2, Col3)
    OUTPUT inserted.* INTO DestinationTableName(Col1, Col2, Col3)
        (SELECT
            Col1,
            Col2,
           'Something modified',
        FROM dbo.Table
        WHERE Col10 = 66)

子查询

当您想将 OUTPUT 连接到另一个表或进行计算(如求和或计数值)并将这些结果插入另一个表时,这很有用。

INSERT INTO DestinationTableName
(Col1, Col2, Col3)
SELECT Col1, Col2, Col3 FROM (
    INSERT INTO steam.DocumentGeographies (Col1, Col2, Col3)
    OUTPUT inserted.*
        (SELECT
            Col1,
            Col2,
           'Something modified',
        FROM dbo.Table
        WHERE Col10 = 66)
) TMP

【讨论】:

  • @Pred 一段不错的代码,对我来说是新的。有没有办法将插入的值(主要是自动增量)分配给变量?
  • 是否可以将 INSERTED.* 保存到单独的临时表中?
  • 是的!将此查询包装为子查询并将其结果插入到临时表中。
  • @TechDo:OUTPUT 子句将“返回”一个表,而不是单个值。您可以将结果插入到表变量 (DECLARE @TableVar TABLE (ColumnDefinitions)) 中,并且可以对该表进行额外处理(就像在任何表上一样)
  • @Pred 谢谢...帮助了很多和一个新概念。
猜你喜欢
  • 2010-10-19
  • 2012-01-23
  • 2014-04-23
  • 2020-12-02
  • 2023-02-09
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多