web-dev-qa-db-ja.com

存在する場合はドロップVSドロップ。

違いがあれば、誰かに教えてもらえますか

DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

MVC WebアプリケーションでJDBCテンプレートを使用しているので、これを要求しています。 DROP [TABLE_NAME]を使用した場合、エラーはTableが存在することを意味します。そして私がDROP IF EXISTS [TABLE_NAME]を使用するならば、それは悪いSQL文法を言います。誰かが手伝ってくれる?

151
AbdulAziz

標準SQL構文は

DROP TABLE table_name;

IF EXISTSは標準ではありません。プラットフォームが異なれば、異なる構文でサポートしている場合もあれば、まったくサポートしていない場合もあります。 PostgreSQLでは、構文は次のとおりです。

DROP TABLE IF EXISTS table_name;

最初のテーブルは、テーブルが存在しない場合、または他のデータベースオブジェクトがそれに依存している場合にエラーをスローします。ほとんどの場合、他のデータベースオブジェクトは外部キー参照になりますが、他にも存在する可能性があります。 (ビューなど)テーブルが存在しない場合でも2番目のメソッドはエラーをスローしませんが、他のデータベースオブジェクトがそれに依存している場合はエラーをスローします。

テーブルとそれに依存する他のすべてのオブジェクトを削除するには、これらのいずれかを使用します。

DROP TABLE table_name CASCADE;
DROP TABLE IF EXISTS table_name CASCADE;

CASCADEは慎重に使用してください。

それは直接尋ねられるものではありません。しかし、テーブルを適切に削除する方法を探していると、他の多くの人もそうであると思いますので、私はこの質問についてつまずきました。

SQL Server 2016以降から使用できます

DROP TABLE IF EXISTS dbo.Table

SQL Server <2016の場合、永続的なテーブルに対して次のようにします。

IF OBJECT_ID('dbo.Table', 'U') IS NOT NULL 
  DROP TABLE dbo.Table; 

またはこれは、一時テーブルの場合

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 
35
Squazz

あなたはあなたの構文でtableを忘れました:

drop table [table_name]

これはテーブルを削除します。

を使う

drop table if exists [table_name]

削除する前にテーブルが存在するかどうかを確認します。
存在する場合はドロップされます。
そうでない場合、エラーはスローされず、アクションも実行されません。

17
juergen d
DROP TABLE IF EXISTS [table_name]

最初にテーブルが存在するかどうかを確認し、存在する場合はテーブルを削除します。

DROP TABLE [table_name]

チェックせずに削除するので、存在しない場合はエラーで終了します。

5
Flakron Bytyqi

そのような名前のテーブルが存在しない場合、DROP IF EXISTSは何もしませんがDROPはエラーで失敗します。

これはあなたがデータベースをスクリプトで作成/修正する場合に便利です。この方法では、テーブルの以前のバージョンが削除されたことを手動で確認する必要はありません。あなたはDROP IF EXISTSをするだけでそれを忘れます。

もちろん、あなたの現在のDBエンジンはこのオプションをサポートしていないかもしれません、それがあなたが提供する情報でエラーについてもっと言うのは難しいです。

4
SJuan76