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

2018.6.7

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を使用してコードを書いているときは、ウィンドウを閉じるまで一時テーブルは残り続けますので、こういった対応が必要になります。

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

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