SQLServer テーブルが存在していたらdropしてcreateする方法

記事内に商品プロモーションを含む場合があります。
2018.6.7 3511 views

2016 以降のバージョン

SQLServer のバージョンが 2016 以降の場合は、1 行で書くことが出来ます。

DROP TABLE IF EXISTS テーブル名

テーブル名の部分に、存在していたら削除したいテーブルを指定することで実現できます。

テーブル名はスキーマ.テーブル名と指定することも可能です。

2016 よりも前のバージョン

SQLServer のバージョンが 2016 よりも前のバージョンを使用している場合は、DROP TABLE IF EXISTS テーブル名が使用できませんので、少しコードが長くなってしまいます。

IF OBJECT_ID(N'テーブル名', N'U') IS NOT NULL
drop table テーブル名

OBJECT_ID()関数を使用して、「テーブル名」が存在するかチェックしています。

テーブル名はスキーマ.テーブル名と指定することも可能です。

一時テーブルも同じように

SQLServerManagementStudio を使用して、一時テーブルを作成してから処理を行うようなコードを書いているときに、すでにテーブルが存在していてエラーになることがあります。

今回紹介している方法を利用することで、回避できます。

IF OBJECT_ID(N'#worktable', N'U') IS NOT NULL
drop table #worktable

create table #worktable(
    sales integer
)

一時テーブルの場合は通常のテーブルと同じように存在するかをチェクして drop することが出来ます。

ストアドプロシージャとして作成して実行している場合には、実行後に一時テーブルが削除されますが、SQLServerManagementStudio を使用してコードを書いているときは、ウィンドウを閉じるまで一時テーブルは残り続けますので、こういった対応が必要になります。

ストアドプロシージャにしてしまった後は、一時テーブルの存在チェック処理は必要ありませんので、コメントアウトするか削除してしまっても構いません。

残していても、特に問題はないので、将来的にデバッグする可能性ある場合は残しておいたほうが便利かもしれません。