Sql 如何存储已执行过程中的临时表?
我有以下代码:Sql 如何存储已执行过程中的临时表?,sql,sql-server,sql-manager,Sql,Sql Server,Sql Manager,我有以下代码: SELECT @Name = [TrigTable] FROM [dbo].[setdevelopmentjob] WHERE [TrigTable] IS NOT NULL PRINT @Name SET @sql = 'SELECT * FROM ' + @Name; #TriggerTable = EXEC sp_executesql @sql; SELECT * FROM #TriggerTable 显然,TriggerTable=Exec sp_execu
SELECT @Name = [TrigTable]
FROM [dbo].[setdevelopmentjob]
WHERE [TrigTable] IS NOT NULL
PRINT @Name
SET @sql = 'SELECT * FROM ' + @Name;
#TriggerTable = EXEC sp_executesql @sql;
SELECT * FROM #TriggerTable
显然,TriggerTable=Exec sp_executesql@sql行的语法不正确,但它显示了我正在尝试做的事情。列是可变的,这意味着我不能只声明一个表变量。如何将此执行过程的输出传递给TriggerTable?您可以使用Select*into方法将数据存储在全局临时表中,要将数据存储在临时表中,您必须首先创建表,我在使用动态sql时知道这一点,但您当然可以在运行时这样做,但您可能仍然需要一些物理表来完成访问它
create table testtmp (id int, namen varchar(15))
--inserting the data into physical table
insert into testtmp (id, namen)
select 1 as ID, 'XYZ' as namen union all
select 2 as ID, 'ABC' as namen union all
select 3 as ID, 'DIG' as namen
create table #temp (ID int)
declare @sql nvarchar(max) = 'select ID from testtmp'
insert into #temp exec sp_executesql @sql
select * from #temp
Gives you this output:
ID
1
2
3
使用全局临时表,您可以轻松地完成此操作,并且不必创建任何表,如果愿意,您可以指定列名
declare @sql nvarchar(max) = 'select * into ##Gloabltmptest from testtmp'
exec sp_executesql @sql
select * from ##Gloabltmptest
输出:
ID namen
1 XYZ
2 ABC
3 DIG
还添加了表变量,类似于临时表
declare @table table (IDtab int, nametab varchar(15))
declare @sql nvarchar(max) = 'select * from testtmp'
insert into @table exec sp_executesql @sql
select * from @table
您可能希望了解以下内容:使用OPENROWSET,这是将存储过程的结果作为表表达式处理的最佳方法。我尝试过这些方法。当您运行sp_executesql时,您无法检索从查询中生成的任何临时表。此处列出的任何答案都不能帮助您吗?很高兴它帮助了@JoshuaJack:如果您想查看,我也添加了表变量,它与临时表方法相同。