【SQL Server 2000】

SQL Serverでテンポラリ・テーブルを作成した際、そのテンポラリ・テーブルが存在を持続できる時間ってどれくらいでしょうか?
テンポラリ・テーブルを作り、別なテーブルから取り出した値を入れて、テンポラリ・テーブルを参照するプログラムを書いたのですが、テンポラリ・テーブルに値を入れる処理に時間がかかった際に、値が入っているテンポラリ・テーブルからデータを取り出そうとしても空で返ってくる場合があり、もしかしたらテンポラリ・テーブル自体が時間が経って消えてしまったのではないかと思いこの質問をしました。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/04/28 13:07:35
  • 終了:2009/04/28 15:03:47

回答(2件)

id:hijk05 No.1

hijk05回答回数1307ベストアンサー獲得回数232009/04/28 13:49:55

ポイント5pt

コネクションが切られるまでです。

http://q.hatena.ne.jp/answer

id:tail_furry

それは分かっています。

コネクションを切っていないから問題なのです。

ただ、質問文の書き方も悪かったですね。申し訳ありません。

2009/04/28 15:00:54
id:fester No.2

fester回答回数124ベストアンサー獲得回数202009/04/28 14:01:43

ポイント65pt

テーブル名の先頭に# 記号を付けた一時テーブル(ローカル一時テーブル)のことでしょうか?

記載のURLに

「明示的に削除するか、テーブルを作成したセッションが切断されるまで保持されます。」とあります。

時間の経過の具合でそのような現象が発生するということは無いはずです。


考えられることは、

1.「処理途中で一旦セッションが切断された(切断するロジックを通った)」

  「空で返ってくる」時点ではもう別セッション(別の一時テーブルを参照)になっている。

2.テーブル名の先頭に## 記号を付けた一時テーブル(グローバル一時テーブル)を使用しており、他のセッションでレコードを消されてしまった。

3.ストアドで一時テーブルを使用しており、ストアドをまたがっている

等だと思います。

http://www.microsoft.com/japan/sql/prodinfo/compare/fororacle/sq...

id:tail_furry

>テーブル名の先頭に# 記号を付けた一時テーブル(ローカル一時テーブル)のことでしょうか?

はい、そうです。呼称を間違っていたようで、すみません。


処理途中でセッションを切断するということはまずありえません。質問文に書いている処理を、連続した流れで行っています。

グローバル一時テーブルを使用して他のセッションでレコードを消されてしまったというのもありえません。データベースの該当テーブルにタッチできるのはボク一人だけですが、ボクが他でプログラムを動かさない限りレコードを消すというミスはないですし、その辺の流れは把握しているつもりです。また、今回使っているのはローカル一時テーブルです。(説明不足でした。)

ストアドをまたいでいるというのもありえません。というか、ストアドプロシージャ自体今回のプログラムでは使っていません。


すみません、詳しくデバッグしてみたら、作成したローカル一時テーブルにデータを入れる際、nullではないはずの列にnullの値が来ていたために処理に失敗していました。テンポラリ・テーブルが消えていた訳ではなかったみたいですね。お騒がせいたしました。

2009/04/28 15:02:59
  • id:fester
    補足
    select @@spid
    というSQLでプロセスIDが取得できるようです。
    時間のかかる処理(問題の発生する部分)の前後でIDをデバッグ出力してIDが変化していないかどうか確認するといいと思います。

    http://uchukamen.com/SQL2005/System/System.htm
  • id:tail_furry
    ポイントを割り振りました。
    自己解決したため、いるかは無しです。
    festerさんの情報量が多く参考になりましたので、かなり多く配分しました。
    どうもありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません