如果多个存储过程正在创建具有相同名称的临时表,我如何知道要删除哪个临时表?
Posted
技术标签:
【中文标题】如果多个存储过程正在创建具有相同名称的临时表,我如何知道要删除哪个临时表?【英文标题】:How do I know which temp table to delete if multiple stored procedures are creating temp tables with the same name? 【发布时间】:2012-09-18 22:51:54 【问题描述】:我一整天都在努力解决这个问题:( ...
我有几个存储过程(在同一个数据库以及不同的数据库中)做同样的事情。
-
创建名为 X 的临时表。
是否使用 X 进行处理。
掉落 X。
问题是这些存储过程正在创建具有相同名称的临时表。如果它们都具有名称并且我不能使用“LIKE”真正删除因为临时表可能被不同的存储过程使用,我如何知道一旦我完成处理后要删除哪个临时表?
这是一个场景。
SP1 开始 -
-
创建临时表。
...在它继续之前,会发生这种情况:
SP2 即将结束
-
删除临时表。
如果发生上述情况,SP1 就会出现问题。如“临时表不存在”
如何绕过这个问题?
当我要删除临时表时,我需要确保删除与创建它的存储过程相关的表。这甚至可能吗?
【问题讨论】:
【参考方案1】:您正在尝试解决您没有遇到的问题。只是放下桌子。如果您查看 SSMS,您将真正拥有独特的表格。 SP 知道该丢弃哪一个。
如果 SP1 和 SP2 使用同一个表,您将遇到更多问题,而不仅仅是删除。
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp
CREATE TABLE #Temp (sID INT PRIMARY KEY CLUSTERED);
-- look in SSMS and you will see #temp appended
-- use #temp
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp
在 SP 中,您甚至不确定是否需要放弃。我认为它会自动删除。
但是,如果您运行前两行并查看 SSMS,您会发现您有自己的 #TEMP - 而不是共享的 #TEMP。运行最后一行,你会看到它消失了。
【讨论】:
我认为这行得通。你这个人!我有错误的 drop 命令。我试图使用“IF EXISTS()”以上是关于如果多个存储过程正在创建具有相同名称的临时表,我如何知道要删除哪个临时表?的主要内容,如果未能解决你的问题,请参考以下文章