如果多个存储过程正在创建具有相同名称的临时表,我如何知道要删除哪个临时表?

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()”

以上是关于如果多个存储过程正在创建具有相同名称的临时表,我如何知道要删除哪个临时表?的主要内容,如果未能解决你的问题,请参考以下文章

具有动态结果的存储过程到临时表中

在存储过程中创建临时表

mysql5.7.26 临时表异常记录

如何在mysql程序中创建临时表并生成不同的名称?

为啥这个 SQL 存储过程需要创建一个临时表才能工作(返回结果)?

SQL存储过程多个结果到临时表中