sql - TSQL从动态sql中选择临时表

标签 sql sql-server tsql temp-tables

这看起来相对简单,但显然并非如此。

我需要通过 select into 语法基于现有表创建临时表:

SELECT * INTO #TEMPTABLE FROM EXISTING_TABLE

问题是,现有的表名称是通过参数接受的...

我可以通过以下方式获取表的数据:

execute ('SELECT * FROM ' + @tableName)

但是我如何将两者结合起来,以便我可以将执行结果直接放入临时表中。

要使用的每个表的列都不相同,因此在获取数据之前构建临时表是不切实际的。

除了使用全局临时表之外,我愿意接受任何建议。

更新:

这完全是荒谬的,但我对全局临时表的保留是,这是一个多用户平台,如果该表长时间停留,就会出现问题......

Sooo..为了完成这一部分,我开始使用执行来生成全局临时表。

execute('select * into ##globalDynamicFormTable from ' + @tsFormTable) 

然后我使用全局临时表来加载本地临时表:

select * into #tempTable from ##globalDynamicFormTable

然后我删除全局表。

drop table ##globalDynamicFormTable

这很脏,我不喜欢它,但目前,在我找到更好的解决方案之前,它必须起作用。

最后:

我想没有办法绕过它。

最佳答案似乎是:

在执行命令中创建一个 View ,并使用它来加载存储过程中的本地临时表。

在执行命令中创建一个全局临时表,并使用它来加载本地临时表。

话虽如此,我可能会坚持使用全局临时表,因为创建和删除 View 在我的组织中经过审核,而且我确信他们会质疑这种情况是否一直发生。

谢谢!

最佳答案

一个工作示例。

DECLARE @TableName AS VARCHAR(100)
SELECT @TableName = 'YourTableName'

EXECUTE ('SELECT * INTO #TEMP  FROM ' + @TableName +'; SELECT * FROM #TEMP;')

具有可访问临时表的第二种解决方案

DECLARE @TableName AS VARCHAR(100)
SELECT @TableName = 'YOUR_TABLE_NAME'

EXECUTE ('CREATE VIEW vTemp AS
        SELECT *
        FROM ' + @TableName)
SELECT * INTO #TEMP  FROM vTemp 

--DROP THE VIEW HERE      
DROP VIEW vTemp

/*START USING TEMP TABLE
************************/
--EX:
SELECT * FROM #TEMP


--DROP YOUR TEMP TABLE HERE
DROP TABLE #TEMP

关于sql - TSQL从动态sql中选择临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9534990/

相关文章:

sql-server - 从 SQLCE 4 迁移到 SQL Server 2008

sqlite - 如何在sqlite中使用if语句

sql-server - 存储过程返回前修改SQL结果集

sql - SQL中调用动态函数名

mysql - 从 MySQL 切换到 Cassandra (NoSQL) 的 future 潜力

sql - 如何使用 ADODB 在一次执行中返回多个记录集?

sql - 如何对 PostgreSQL JSON 字段进行排序

sql - 阿拉伯文和英文城市名称列表

SQL Server 2012 : how to get count group by from multiple table joins

sql-server - 在同一台电脑上以不同的名称恢复 SQL Server 数据库