动态输出 SQL

OUTPUT in Dynamic SQL

以下 sql 查询是我的查询的一部分。这个想法是在结果集上会有一个循环(游标),将记录一条一条地插入另一个 table。它是动态的 sql 因为我不完全知道的原因,但我必须与之合作。为了清楚起见,我省略了光标和许多列名。

    DECLARE @db_name VARCHAR(500)
    SET @db_name = '[TESTDB].DBO.[TestTable]'

    DECLARE @guid UNIQUEIDENTIFIER
    SET @guid = '15D372FC-63AF-415B-8404-46A15ABE9488'

    DECLARE @sql NVARCHAR(max)
    SET @sql = 'INSERT INTO dbo.OtherTable
               (
                    guid,
                    description
               )
               SELECT NEWID(),
                      description
               FROM ' + @db_name

    DECLARE @result varchar(max)
    EXEC sp_executesql @sql,
    N'OUTPUT',
    OUTPUT;

所以想法是循环结果语句中的记录,并将每行中的数据插入到 OtherTable 中的新行中。将记录插入 OtherTable 后,必须捕获使用 NEWID() 生成的唯一标识符(请注意,它是存储在 varchar(40) 中的 guid),以便可以将其写入另一个 table.

我需要一些帮助。谢谢!

通过您的编辑,整体设置变得更加清晰。如果我理解正确,那么在没有任何动态 SQL 的情况下,查询应该是简单的 INSERTOUTPUT 子句。

INSERT INTO dbo.OtherTable
(
    guid,
    description
)
OUTPUT inserted.guid AS ID INTO dbo.ThirdTable(ID)
SELECT 
    NEWID(),
    description
FROM dbo.TestTable
;

TestTable 中的行被插入到 OtherTable 中。 NEWID 生成的值通过 INSERT 进入 OtherTable 并通过 OUTPUT 子句进入 ThirdTable

使用动态 SQL,您只需将源名称 table 和 运行 与简单的 sp_executesql 连接起来即可构建此字符串,无需任何 OUTPUT参数。