テーブルの存在確認-SQL Server 一時テーブル編

SQL Serverで使用する一時テーブルですが、コチラで書いたような方法では存在確認をすることができません。
これは、一時テーブルはtempdbに作成されるためだと思われます。
つまり、今操作している(つもり)のデータベースとは違う所で管理されているのです。なので、今のデータベースのsysobjectsを検索しても、そりゃぁ見つからないわけです。
ではどうすればよいか?一時テーブルはtempdbに作成されるので、素直にtempdbのsysobjectsを見に行けばいいわけです。こんな感じですね。


[T-SQL]
use [AppDB]
–ここで一時テーブルを作成する
create table #tTemp
( SomeValue nvarchar(50) )
–これは0件になります
select *
from sysobjects
where
ID = object_id(‘#tTemp’)
and
ObjectProperty(ID,’IsUserTable’)=1
use [tempdb]
–tempdbに切り替えて、テーブル存在確認
select *
from sysobjects
where
ID = object_id(‘#tTemp’)
and
ObjectProperty(ID,’IsUserTable’)=1
use [AppDB]
–元のデータベースに戻して、一時テーブルを削除
drop table #tTemp

或いは、コチラでご紹介したTRY-CATCHを使うと言うのもあります。既に同名の一時テーブルが存在する場合、
2714-データベースに ‘[一時テーブル名]’ という名前のオブジェクトが既に存在します。
という番号とメッセージが返却されるので、そこで判断するという手もあります。
ご紹介まで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam Protection by WP-SpamFree