特定の一時テーブルが作成された tempdb データベースを参照せずに、セッションで作成されたかどうかを判断する方法はありますか? ユーザーはログイン時に特定の tempdb に割り当てられるため、どの tempdb を使用するかわかりません。
一時テーブルからデータを選択するために tempdb を指定する必要はないので、テーブルが存在するかどうかを確実に確認できますか?
特定の一時テーブルが作成された tempdb データベースを参照せずに、セッションで作成されたかどうかを判断する方法はありますか? ユーザーはログイン時に特定の tempdb に割り当てられるため、どの tempdb を使用するかわかりません。
一時テーブルからデータを選択するために tempdb を指定する必要はないので、テーブルが存在するかどうかを確実に確認できますか?
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)
)
ここで一時テーブルを使用するべきではないように思えます...これらは通常のテーブルのように見えます(おそらくユーザー識別子を使用)。ここでのシナリオは何ですか?
この方法で一時テーブルを使用すると、オプティマイザ/クエリ キャッシュが混乱する可能性があることに注意してください。#FOO の意味は呼び出しごとにかなり変化するため、多くの再コンパイルを行う必要があります。