web-dev-qa-db-ja.com

2つのセッションで同じ名前の#tempテーブルを作成できますか?

一時テーブル(#myTable)とカーソルの使用。これにより、同時ユーザーがアプリケーションを介してカーソルにアクセスしているときに問題が発生しますか?同じ名前で別の一時テーブルを作成できますか?

以下はサンプルコードです:

Open cursor;
Fetch Next from cursor into @Variable_Temp_Table_Name;
Create table #myTable(pk int)
While @@Fetch_Status = 0
Begin    
Fetch Next from cursor into @Variable_Temp_Table_Name;
End 
17

SQLサーバーは常に一時テーブル名の最後(シーンの背後)に乱数を追加します。同時ユーザーが同じ名前のセッションで一時テーブルを作成すると、SQLサーバーはtempdbに複数の一時テーブルを作成します。

SSMSの3つの異なるセッションで#TempTableという3つの一時テーブルを作成しました。tempdbに移動すると、各一時テーブルの名前にランダムな(一意の)文字列が追加された一時テーブルが表示されます。

enter image description here

20
M.Ali

はい、複数のアプリケーションが#tempテーブルの独自のコピーを取得します。これが#tempテーブルを使用するポイントです。これは、各同時セッションが独自の独立したオブジェクトを持っているためです。これは、#tempテーブルと組み合わせてカーソルを使用しているかどうかとは関係ありません(とにかくカーソルは必要ないのではないかと思います。具体的にコメントするのに十分なコードが含まれていませんでした)。

編集してコメントを含める:

#tempテーブルの使用に関するもう1つのことは、テーブルに制約を追加する必要がある場合、SQLサーバーに名前を生成させることです。そうしないと、テーブルがセッションに対して一意であっても、制約は発生せず、2番目のインスタンスがエラーを出力します。テーブル。

11
Aaron Bertrand