3

7つの一時テーブルを使用して1つのストアドプロシージャを作成しました。各一時テーブルは、それぞれの作業の最後に削除されます。

あるWebサービスと同じWebサービスから別のインスタンスに使用されているSPを呼び出しています。

すべての一時テーブルを強制的に削除しましたが、SPを実行しても、「tempdb/TemporaryTable」にある一時テーブルは削除されません。また、アプリケーションの新しいインスタンスを開いて同じSPを実行しようとすると、同じ一時テーブルが変更されます。

これは私にとって問題を引き起こします。SPが同時に実行されるとテーブルがロックされ、テーブルがロックされ、私のspは結果を生成して例外をスローできません。

そのため、操作の最後に一時テーブルを削除したいと思います。助けてください。

4

4 に答える 4

7

なぜこれが起こっているのかはわかりませんが、以前にも対処しました。SPの最初または最後でテーブルをクリーンアップするか、テーブル変数を使用してみてください。

IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName
于 2011-07-08T20:39:21.793 に答える
3

これは、多くのTempテーブルを使用していて、spとdropステートメントの間にエラーが発生した場合に発生する可能性があります。
したがって、常にベストプラクティスを使用する

IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName

SPの開始時に。

于 2012-10-25T09:38:26.970 に答える
1
IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName

SQL Serverストアの一時テーブル名に余分な文字を追加することがわかっているため、これは機能しないと思います。存在する場合(「#TableName%」のような名前のtempdb.sys.tablesから1を選択)DROP TABLE #TableName

于 2013-06-17T06:50:38.173 に答える
1

一時テーブルの削除を強制するには、

BEGIN TRY DROP #MyTable END TRY BEGIN CATCH END CATCH

醜いが効果的。一時テーブルごとに個別のTRYを使用します。

于 2014-02-17T12:18:13.040 に答える