私はテンポラリテーブル(#temp_table)を最初にチェックし、テンポラリテーブルがあればそれを削除し、テーブルを使用し、最後にテーブルを削除するストアドプロシージャを持っています。このSPは、ユーザが何かをトリガするときにランダムに呼び出され、時にはSPが同時に実行されるか、または重複して実行されることがあります。MS SQL Server 2005では、同じSPの異なる実行によって一時テーブルにアクセスするとどうなりますか?
私はExec1とExec2の両方が#tempテーブルを作成、変更、削除する同じSPの両方を持ち、互いに数ミリ秒以内に実行しているとします。
どうしますか? Exec1は#temp_tableをロックし、Exec1は終了しますがExec2は待機しますか?それは明らかに私の場合に望ましいでしょう。 Exec1 & 2がsametimeでテーブルを使用することは望ましくなく、Exec1が既にテーブルを使用しているため、Exec2が失敗することもありません。
[編集]私はちょうどテーブル変数に私の一時テーブルを変換する必要がありますか?
私のSPでは 'IF OBJECT_ID( 'tempdb ..#temp_table')がNULLではありません \t DROP TABLE#temp_tableこれは何もしませんか?あるいは、これは他の処刑に悪影響を及ぼす可能性がありますか? – jreed121
一時テーブルの有効範囲がセッションに限定されているため、毎回新しいセッション(Webアプリなど)から呼び出す場合は、その必要はありません。詳細は私の答えを見てください。 –
あなたはDommerのようにその必要はありませんが、それを作成しようとする前にOBJECTの存在をチェックするのは常に良い方法です。あなたのprocでそのビットのビットを保つ。 –