gpt4 book ai didi

sql-server - 删除临时表后可以重新创建它吗?

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

给定:

存储过程中的代码:

select bleh
into #tblTemp
from FunctionThatReturnsTable('some','params')

-- do some stuff

drop table #tblTemp

-- Error on this command:
-- 'There is already an object named '#tblTemp' in the database.'
select bleh
into #tblTemp
from FunctionThatReturnsTable('some','other params')

问题:

我无法重新创建此临时表。我的解决方法是使用 #tmpTable1、#tmpTable2、#tempTable3 等。有没有办法解决这个问题?每次只使用一个临时表就好了。

如果不是,原因是什么?

最佳答案

正如我的评论所反射(reflect)的,我建议答案是为您创建的每个对象使用不同的 #temp 表名称。这有点像对医生说:“我这样做时会很痛。”他可能的 react 是,“停止这样做!”

这是一个问题的原因是 SQL Server 的解析器尝试一次性解析整个批处理。它可以清楚地看到您尝试多次创建相同的 #temp 表,但忽略了中间的 DROP 命令(我无法确切地告诉您这是为什么,因为我没有访问源代码)。这与您不能执行此操作的原因相同:

IF (1=1)
CREATE TABLE #foo(i INT);
ELSE
CREATE TABLE #foo(i VARCHAR(32));

解析器看到两个相同的名称,但无法真正遵循 IF/ELSE 逻辑。

除了避免多个同名的 #temp 表给解析器带来的问题之外,使用唯一名称的另一个好处是,如果您不明确删除它们,它们可以被重新使用。这将减轻 tempdb 在元数据/锁定方面的负载。

关于sql-server - 删除临时表后可以重新创建它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9812302/

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