gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:59:04 26 4
gpt4 key购买 nike

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

我需要通过 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com