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では、ドロップする必要があるかどうかさえわかりません。自動的にドロップされると思います。

ただし、最初の2行を実行してSSMSを調べると、共有#TEMPではなく独自の#TEMPがあることがわかります。最後の行を実行すると、それが消えるのがわかります。

于 2012-09-18T22:58:28.663 に答える