sql >> データベース >  >> RDS >> Sqlserver

SQLServerでオブジェクトDIEを作成する

    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

    1. PostgreSQLでのpg_sleep()のしくみ

    2. エラーORA-01804のテキストを取得しようとしたときにエラーが発生しました

    3. mysqlからn番目ごとの行をどのように選択しますか

    4. SQL Server:MAX(DATE)の行のみを選択します