Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何存储已执行过程中的临时表?_Sql_Sql Server_Sql Manager - Fatal编程技术网

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:如果您想查看,我也添加了表变量,它与临时表方法相同。