0

特定の一時テーブルが作成された tempdb データベースを参照せずに、セッションで作成されたかどうかを判断する方法はありますか? ユーザーはログイン時に特定の tempdb に割り当てられるため、どの tempdb を使用するかわかりません。

一時テーブルからデータを選択するために tempdb を指定する必要はないので、テーブルが存在するかどうかを確実に確認できますか?

4

2 に答える 2

5

object_id を使用して、一時オブジェクトの存在を確認できます。

SELECT object_id('#tmpTable')

必要に応じて、使用している tempdb を指定できますが、その必要はありません。

SELECT object_id('tempdb..#tmpTable')

これはグローバル一時テーブルでも機能することに注意してください。

SELECT object_id('##tmpTable')

最後に DROP TABLE を実行しなくてもスクリプトを再実行できるようにするために、一時テーブルを作成する前に必ずチェックとドロップを実行します。SQL コードを開発しているときにテーブルを作成したままにしておくことがよくあります。

IF NULLIF(object_id('#tmpTable'), 0) IS NOT NULL DROP TABLE #tmpTable
CREATE TABLE #tmpTable (
    id int,
    col1 varchar(100)
)
于 2008-12-10T14:13:20.200 に答える
0

ここで一時テーブルを使用するべきではないように思えます...これらは通常のテーブルのように見えます(おそらくユーザー識別子を使用)。ここでのシナリオは何ですか?

この方法で一時テーブルを使用すると、オプティマイザ/クエリ キャッシュが混乱する可能性があることに注意してください。#FOO の意味は呼び出しごとにかなり変化するため、多くの再コンパイルを行う必要があります。

于 2008-10-10T08:00:28.963 に答える