SQL Serverでは、存在しないオブジェクトを削除しようとすると、エラーが発生します。エラーが発生したくない場合は、オブジェクトの存在を確認するためのコードを追加する必要があります。
SQL Server 2016より前は、IF
を追加する必要がありました 関連するシステムオブジェクトを照会して、オブジェクトが存在するかどうかを確認するステートメント。
SQL Server 2016から、新しい、よりクリーンなメソッドを使用して、オブジェクトが存在するかどうかを確認できるようになりました。これをDROP IF EXISTS
と呼びます。 (別名「DIE」)。
例1-基本構文
構文には、実際にはDROP IF EXISTS
は含まれていません。 そのまま文字列。あなたがする必要があるのは、DROP
の間にオブジェクトタイプを挿入することです およびIF
。
DROP TABLE IF EXISTS Customers
この場合、テーブルを削除するので、TABLE
という単語を使用します。 DROP
の間に挿入されます およびIF
。ドロップしたいテーブルの名前(この場合は顧客 )が最後に配置されます。
例2–基本的なデモ
これは、データベースを作成し、それを削除してから、再度削除を試みる例です。
CREATE DATABASE Homer; GO DROP DATABASE IF EXISTS Homer; GO DROP DATABASE IF EXISTS Homer; GO
結果:
Started executing query at Line 17 Commands completed successfully. Started executing query at Line 19 Commands completed successfully. Started executing query at Line 21 Commands completed successfully.
存在しないオブジェクトを3行目にドロップしようとしても、エラーは発生しません。
例3–IFが存在しない場合
今回もIF EXISTS
を削除する以外は、ここにあります。 一部。
CREATE DATABASE Homer; GO DROP DATABASE Homer; GO DROP DATABASE Homer; GO
結果:
Started executing query at Line 17 Commands completed successfully. Started executing query at Line 19 Commands completed successfully. Started executing query at Line 21 Msg 3701, Level 11, State 1, Line 5 Cannot drop the database 'Homer', because it does not exist or you do not have permission.
この場合、存在しないオブジェクトを削除しようとしているため、エラーが発生します。
例4–列と制約
列と制約にDIEを使用することもできます。
たとえば、DROP COLUMN IF EXISTS
を使用できます。 ALTER TABLE
内 ステートメント。
これが例です。
DROP TABLE IF EXISTS DieTest; GO CREATE TABLE DieTest ( DieTestId uniqueidentifier NOT NULL DEFAULT NEWID(), DieTestName varchar(70), InsertDate datetime2(7) NOT NULL DEFAULT GETDATE() ); GO ALTER TABLE DieTest DROP COLUMN IF EXISTS DieTestName; GO ALTER TABLE DieTest DROP COLUMN IF EXISTS DieTestName; GO
結果:
Started executing query at Line 1 Commands completed successfully. Started executing query at Line 3 Commands completed successfully. Started executing query at Line 11 Commands completed successfully. Started executing query at Line 15 Commands completed successfully.
例5– SQLServer2016より前
SQL Server 2016より前では、オブジェクトの存在をテストするには、次のような操作を行う必要がありました。
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
この例では、DB_ID()
を使用しています データベースを扱っているからです。オブジェクトが別のタイプである場合は、OBJECT_ID()
を使用する必要がある場合があります 機能か何か他のもの。
例:
IF OBJECT_ID('dbo.Customers, 'U') IS NOT NULL DROP TABLE dbo.Customers; IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'MyTrigger') DROP TRIGGER MyTrigger
このコードを見始めると、DROP IF EXISTS
の理由がわかります。 T-SQL構文への歓迎すべき追加です。
対象オブジェクト
DIEは、次のオブジェクトで使用できます。
集計 | 手順 | 表 |
組み立て | 役割 | トリガー |
表示 | ルール | タイプ |
データベース | SCHEMA | ユーザー |
デフォルト | セキュリティポリシー | 表示 |
機能 | シーケンス | |
インデックス | 同義語 |
前述のように、DIEは、ALTER TABLE
を使用するときに、列と制約にも使用できます。 ステートメント:
- 存在する場合はALTERTABLEDROP COLUMN
- 存在する場合のALTERTABLEDROP CONSTRAINT