違いがあれば、誰かに教えてもらえますか
DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]
MVC WebアプリケーションでJDBCテンプレートを使用しているので、これを要求しています。 DROP [TABLE_NAME]
を使用した場合、エラーはTableが存在することを意味します。そして私がDROP IF EXISTS [TABLE_NAME]
を使用するならば、それは悪いSQL文法を言います。誰かが手伝ってくれる?
標準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;
あなたはあなたの構文でtable
を忘れました:
drop table [table_name]
これはテーブルを削除します。
を使う
drop table if exists [table_name]
削除する前にテーブルが存在するかどうかを確認します。
存在する場合はドロップされます。
そうでない場合、エラーはスローされず、アクションも実行されません。
DROP TABLE IF EXISTS [table_name]
最初にテーブルが存在するかどうかを確認し、存在する場合はテーブルを削除します。
DROP TABLE [table_name]
チェックせずに削除するので、存在しない場合はエラーで終了します。
そのような名前のテーブルが存在しない場合、DROP IF EXISTS
は何もしませんがDROP
はエラーで失敗します。
これはあなたがデータベースをスクリプトで作成/修正する場合に便利です。この方法では、テーブルの以前のバージョンが削除されたことを手動で確認する必要はありません。あなたはDROP IF EXISTS
をするだけでそれを忘れます。
もちろん、あなたの現在のDBエンジンはこのオプションをサポートしていないかもしれません、それがあなたが提供する情報でエラーについてもっと言うのは難しいです。