0

我一直试图弄清楚这一天:( ...

我有几个存储过程(在同一个数据库以及不同的数据库中)做同样的事情。

  1. 创建名为 X 的临时表。
  2. 使用 X 进行处理。
  3. 掉落 X。

问题是这些存储过程正在创建具有相同名称的临时表。如果它们都具有名称并且我不能使用“LIKE”真正删除因为临时表可能正在被不同的存储过程使用,我如何知道一旦我完成处理后要删除哪个临时表?

这是一个场景。

SP1 开始 -

  1. 创建临时表。...在它继续之前,会发生这种情况:

SP2 即将结束

  1. 删除临时表。

如果发生上述情况,SP1 就会出现问题。如“临时表不存在”

我如何绕过这个问题?

当我要删除临时表时,我需要确保删除与创建它的存储过程相关的表。这甚至可能吗?

4

1 回答 1

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。运行最后一行,你会看到它消失了。

于 2012-09-18T22:58:28.663 回答