我有一个使用 sp_executesql 生成结果集的存储过程,结果中的列数可能有所不同,但形式为 Col1 Col2 Col3 等。
我需要将结果放入临时表或表变量中,以便我可以使用它。问题是我需要定义临时表的列,但我无法使用 sp_executesql 动态执行此操作,因为执行命令后临时表的范围会丢失。
我曾考虑过使用全局临时表的想法,因为范围允许动态创建它,但是,全局临时表很有可能通过此过程的并发执行进行更新。
有任何想法吗?
在这篇文章中的 @SQLMenace 的帮助下,我找到了一个适合我的解决方案T-SQL 动态 SQL 和临时表
简而言之,我需要首先在普通 SQL 中创建一个 #temp 表,然后我可以使用进一步的动态 SQL 语句更改结构。在此示例中,@colcount 设置为 6。当我实现此操作时,这将由另一个存储过程确定。
IF object_id('tempdb..#myTemp') IS NOT NULL
DROP TABLE #myTemp
CREATE TABLE #myTemp (id int IDENTITY(1,1) )
DECLARE @cmd nvarchar(max)
DECLARE @colcount int
SET @colcount = 6
DECLARE @counter int
SET @counter = 0
WHILE @counter < @colcount
BEGIN
SET @counter = @counter + 1
SET @cmd = 'ALTER TABLE #myTemp ADD col' + CAST(@counter AS varchar(4)) + ' NVARCHAR(MAX)'
EXEC(@cmd)
END
INSERT INTO #myTemp
EXEC myProc @param1, @param2, @param3
SELECT * FROM #myTemp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)