TSQL从动态sql中选择临时表

2024-02-16

这看起来比较简单,但显然并非如此。

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

SELECT * INTO #TEMPTABLE FROM EXISTING_TABLE

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

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

execute ('SELECT * FROM ' + @tableName)

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

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

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

Update:

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

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

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

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

select * into #tempTable from ##globalDynamicFormTable

然后我删除全局表。

drop table ##globalDynamicFormTable

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

到底:

我想没有办法绕过它。

最好的答案似乎是:

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

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

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

Thanks!


一个工作示例。

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TSQL从动态sql中选择临时表 的相关文章

随机推荐