2017-06-12 73 views
1

我有不同的表循环,返回结果 与不同的列数。动态存储查询输出TSQL

是否可以在不创建具体表的情况下存储查询的输出?

我读过关于临时表的一些职位,所以我想这个简单的例子:以上

create table #temp_table1 (id int) 

insert into #temp_table1 ('select * from table1') 

表1可以是任何表

我收到以下错误信息:

列名或提供的值数量与表格定义不匹配。

是否有避免硬编码表定义完全匹配您的查询输出?

谢谢!

回答

3

你可以做一个select into - 将自动创建临时表:

SELECT * INTO #Temp 
FROM TableName 

的问题是,由于使用的是动态SQL,你的临时表将只提供动态SQL范围内 - 这样做这样的事情,这将导致一个错误:

EXEC('SELECT * INTO #Temp FROM TableName') 

SELECT * 
FROM #Temp -- The #Temp table does not exists in this scope! 

使用动态SQL,你必须使用一个全局临时表做这种事情(你必须采用水滴做一次!):

EXEC('SELECT * INTO ##GlobalTempFROM TableName') 

SELECT * INTO #Temp 
FROM ##GlobalTemp -- Since this is a global temporary table you can use it in this scope 

DROP TABLE ##GlobalTemp