SQLServerでDROPIF EXISTSを使用するにはどうすればよいですか?



問題を排除するために楽器を試してください

この記事では、 「DROPIFEXISTS」 SQL Server2016以降のバージョンで使用可能なステートメント。 「終了した場合」 は、SQL Server2016以降のバージョンの既存のDROPステートメントに追加された最新のオプション句です。基本的に、 「DROPIFEXISTS」 オプションは、エンティティが作成または削除される前に、エンティティがデータベースに残っているかどうかを確認する必要がある場合に使用されます。この場合、最初に既存のデータベースオブジェクトを削除してから、必要に応じて変更を加えて再作成します。



したがって、if条件の古い書き方と、if条件の内部で、オブジェクトの存在をテストしてオブジェクトを削除するステートメントを書くことを防ぎます。発生しない場合は、バッチ内の次のステートメントが引き続き実行されます。ただし、存在しないオブジェクトを削除しようとすると、次のようなエラーメッセージが表示されます。



次のクエリを実行します。



ドロップテーブルdbo.company

出力は次のようになります。

存在しないデータベースオブジェクトを削除しているときにエラーが発生します

構文

「DROPobject_type [IF EXISTS] object_name」

引数

OBJECT_TYPE:



オブジェクトタイプは、データベース、トリガー、アセンブリ、シーケンス、インデックス、テーブル、プロシージャビュー、関数などの任意のユーザーにすることができます。

存在する場合:

これはオプションの句であり、DROPステートメントに記載されている場合は、オブジェクトの存在を確認します。存在する場合はドロップします。それ以外の場合は、ブロック内の次のステートメントを生成せずに実行し続けます。

SQL Server 2016に新しいメソッド「DROPIFEXISTS」が導入されたことで、開発者は簡単なコードを記述できるようになりました。

まず、「appuals」という名前のデータベースを作成します。

データベースの作成

次に、次のコードを実行して、削除するテーブルを作成します。

use [appuals] Go CREATE TABLE temp(id INT、name varchar(100)); GO

出力は次のようになります。

テーブルの作成

さらに、次のコードを使用して、削除するストアドプロシージャを作成します。

USE [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create PROCEDURE [dbo]。[sp_temp] AS BEGIN SET NOCOUNT ON; SELECT * from dbo.temp;終わり

出力は以下のようになります。

ストアドプロシージャの作成

古い方法:SQLServerがデータベースオブジェクトで終了する場合にdropを使用する前

SQL Server2016より前にDROPIF EXISTSメソッドを使用するには、長いIFステートメントラッパーコードを記述する必要がありました。

存在する場合はテーブルを削除します

テーブルを削除する以前の方法は次のとおりです。

SQL Server 2015以前を使用している場合は、次の一連のコードを実行する必要があります。

If(OBJECT_ID( 'dbo.temp')Is Not Null)Drop Table temp

出力は次のようになります。

テーブルを落とす

現在、その構文は非常に紛らわしいため、SQL Server 2016以降を使用している場合は、大きなラッパーの代わりに単純なDROP IFEXISTステートメントを使用できます。

存在する場合はストアドプロシージャを削除します。

プロシージャを削除するには、ストアドプロシージャが存在するかどうかを確認する条件ステートメントを記述してから、dropステートメントを記述する必要があります。そうしないと、ストアドプロシージャが存在しない場合にエラーが発生します。

次に、次のステートメントを実行して、SQL Server2016より前のバージョンでプロシージャを削除します。

IF EXISTS(SELECT 1 FROM sys.procedures WHERE Name = 'sp_temp')DROP PROCEDURE dbo.sp_temp

出力は次のようになります。

ifラッパーコードの古い方法を使用してプロシージャを削除します

存在する場合はデータベースを削除します。

以前のバージョンのSQLServerを使用している場合は、次のコードを実行してデータベースを削除する必要があります。

DB_ID( 'appuals')がNULLでない場合BEGIN DROP DATABASE appuals END

出力は次のようになります。

古い方法を使用してデータベースを削除します

新しい方法:SQL Server2016以降のバージョンでサポートされているDROPIF EXISTS

SQL Server 2016以降でデータベースオブジェクトを削除するには、簡単なステートメントを実行する必要があります。

存在する場合はテーブルを削除します。

SQL Server 2016で次のようにステートメントを記述して、格納されているテーブルが存在する場合は削除できます。

存在する場合のドロップテーブルdbo.temp

出力は次のようになります。

新しい方法を使用してテーブルを削除します

存在する場合は手順を削除します。

次に、次のコードを実行して、記事の冒頭で作成したストアドプロシージャを削除します。

存在する場合のドロップ手順dbo.sp_temp

出力は以下のようになります。

新しい方法を使用してテーブルを削除します

構文に関する限り、この単純なステートメントは理解しやすく、覚えやすいものです。同様に、同じ手順に従って他のデータベースオブジェクトを削除できます。

存在する場合はデータベースを削除します。

if presentチェックを使用してデータベースを削除する場合は、次のコードを実行します

appualsが存在する場合は、MASTER GODROPデータベースを使用します

出力は以下のようになります。

新しい方法を使用してデータベースを削除します

この方法を使用する利点は、データベースが存在しない場合でもエラーが発生せず、バッチ内の次のステートメントが引き続き実行されることです。すでにドロップされたデータベースを再ドロップしてみましょう。

すでにドロップされたデータベースを再ドロップしているときにエラーが発生します。

同様に、データベースからインデックス、ビュー、シーケンス、アセンブリなどを削除できます。

読んだ3分