以下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),以便将其写入另一个表中。
我想请一些帮助。谢谢!
答案 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
中的行已插入OtherTable
。 NEWID
生成的值通过OtherTable
进入INSERT
,并通过ThirdTable
条进入OUTPUT
。
使用动态SQL,您只需通过连接源表的名称来构建此字符串,然后使用简单的sp_executesql
运行它而不使用任何OUTPUT
参数。