DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SQLServer2005の一時テーブルについて

環境/言語:[WindowsXp]
分類:[.NET]

お世話になります。

現在、VB.NET2005とSQLServer2005にて開発をしています。

SQLServerストアドの中に毎回ローカル一時テーブルを
作成して処理した後、その一時テーブルを明示的に削除しています。

しかし処理完了後、システムデータベースtempdbの中を見ると、
指定したテーブル名と違う名前の一時テーブルが残ったままです。

例:#TB_Sampleという名前を指定したが、デバッグしてみると、
  確かに処理の途中に一時テーブル#TB_Sampleができていて、
  削除されたが、最後に違う名前のテーブルが生成されてしまいます。
  →dbo.#7C8480AEやdbo.#7E6CC920など、のような名前パターンです。

このdbo.#7C8480AE や dbo.#7E6CC920 などはどうして生成されたか、
どなたかご教授をお願いします。

> しかし処理完了後、システムデータベースtempdbの中を見ると、
> 指定したテーブル名と違う名前の一時テーブルが残ったままです。
>
> 例:#TB_Sampleという名前を指定したが、デバッグしてみると、
>   確かに処理の途中に一時テーブル#TB_Sampleができていて、
>   削除されたが、最後に違う名前のテーブルが生成されてしまいます。
>   →dbo.#7C8480AEやdbo.#7E6CC920など、のような名前パターンです。
>
> このdbo.#7C8480AE や dbo.#7E6CC920 などはどうして生成されたか、
> どなたかご教授をお願いします。

デッドロックがらみによる削除失敗ぽいような気が・・・
英文ですが、以下に情報あります。
http://support.microsoft.com/kb/131548/en-us
> デッドロックがらみによる削除失敗ぽいような気が・・・
> 英文ですが、以下に情報あります。
> http://support.microsoft.com/kb/131548/en-us

ひらぽんさん、アドバイスありがとうございます。

上記のサイトを見てみましたが、いまいち意味よく分かりませんでした。

それに、SQLServer側で下記のように直接試してみました。↓↓↓

・ストアド中の処理を全部コピーして、BEGIN〜ENDの中に入れて、
 SQLServer側で直接実行してみたら、上記のdbo.#7C8480AEや
 dbo.#7E6CC920などのような一時テーブルが生成されません。

・SQLServer側で「EXEC ストアド名」を実行してみたら、
 上記のようなテーブルが生成されてしまいます。

これはこれは、どういうことかよく分かりません。



そもそもストアドの中でローカル一時テーブルを作成した場合、
処理のあと、上記のようなテーブルが生成されることは正常なのでしょうか???

ひらぽんさん、どなたか、
是非ご知恵をお貸しください。

DOBON.NET | プログラミング道 | プログラミング掲示板