gpt4 book ai didi

sql-server - 动态创建后如何访问temptable

转载 作者:行者123 更新时间:2023-12-04 03:18:12 25 4
gpt4 key购买 nike

我正在使用语句

SELECT    * 
INTO #gsig_ref
FROM gsign
WHERE [name] NOT LIKE 'RESERVE%' OR [name] NOT LIKE 'Spare%'



EXECUTE('SELECT * INTO #db1 FROM ' + @db1)
EXECUTE('SELECT * INTO #db2 FROM ' + @db2)

其中 @db1 将在运行时提供(例如 @db1 = '#gsig_ref')

如果我说 select * from #db1... 它说无效对象。请帮助我如何从 #db1 访问数据.. 因为我在另一个查询中使用了它,比如

SELECT        DISTINCT @p1 INTO #curs_name
FROM #db1
WHERE @p1 NOT IN (SELECT @p2 FROM #db2)
ORDER BY @p1

如何在上述查询中访问 #db1 并且 @p1 是此过程的输入变量,我应该将它用于 distinct @ p1..

最佳答案

在存储过程中创建的本地临时表在过程结束时被删除;其他存储过程或调用进程看不到它们。

您可以生成整个 SQL,有效地将临时表移动到动态 SQL,例如:

declare @sql varchar(max);
set @sql = 'select into #t1 ....; select * from #t1';
exec (@sql);

如果我读到它,我想知道为什么您的外部过程甚至需要临时表,但可能有充分的理由。

如果您确定同一时间只执行一个调用,另一种选择是使用全局临时表。它们使用双散列声明,如 ##TempTable。全局临时表在其过程结束后仍然存在,但可以从多个 session 中引用。

关于sql-server - 动态创建后如何访问temptable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2070363/

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