动态SQL中的OUTPUT

时间:2017-01-18 10:22:57

标签: sql sql-server sql-server-2014-express

以下sql查询是我的查询的一部分。这个想法是在结果集上会有一个循环(光标),在另一个表中逐个插入记录。它是动态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),以便将其写入另一个表中。

我想请一些帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

TestTable中的行已插入OtherTableNEWID生成的值通过OtherTable进入INSERT,并通过ThirdTable条进入OUTPUT

使用动态SQL,您只需通过连接源表的名称来构建此字符串,然后使用简单的sp_executesql运行它而不使用任何OUTPUT参数。