Als u in SQL Server een object probeert te verwijderen dat niet bestaat, krijgt u een foutmelding. Als u geen foutmelding wilt krijgen, moet u wat extra code toevoegen om te controleren op het bestaan van het object.
Vóór SQL Server 2016 moest u een IF
. toevoegen statement dat de relevante systeemobjecten opvroeg om erachter te komen of het object al dan niet bestond.
Vanaf SQL Server 2016 kunt u nu een nieuwe, schonere methode gebruiken om te controleren of een object bestaat. We noemen het DROP IF EXISTS
(ook wel bekend als "DIE").
Voorbeeld 1 – Basissyntaxis
De syntaxis bevat niet echt de DROP IF EXISTS
touw zoals het is. Wat u moet doen, is het objecttype invoegen tussen DROP
en IF
.
DROP TABLE IF EXISTS Customers
In dit geval laat ik een tabel vallen, dus het woord TABLE
wordt ingevoegd tussen DROP
en IF
. De naam van de tafel die ik wil neerzetten (in dit geval Klanten ) wordt aan het einde geplaatst.
Voorbeeld 2 – Basisdemo
Hier is een voorbeeld van het maken van een database, deze vervolgens verwijderen en vervolgens opnieuw proberen te verwijderen.
CREATE DATABASE Homer; GO DROP DATABASE IF EXISTS Homer; GO DROP DATABASE IF EXISTS Homer; GO
Resultaat:
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.
Er treden geen fouten op, ook al probeer ik een niet-bestaand object op de derde regel te plaatsen.
Voorbeeld 3 – Zonder INDIEN BESTAAT
Hier is het weer, maar deze keer verwijder ik de IF EXISTS
onderdeel.
CREATE DATABASE Homer; GO DROP DATABASE Homer; GO DROP DATABASE Homer; GO
Resultaat:
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.
In dit geval krijg ik een foutmelding, omdat het een object probeert te laten vallen dat niet bestaat.
Voorbeeld 4 – Kolommen en beperkingen
Je kunt DIE ook gebruiken voor kolommen en beperkingen.
U kunt bijvoorbeeld DROP COLUMN IF EXISTS
. gebruiken binnen uw ALTER TABLE
verklaring.
Hier is een voorbeeld.
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
Resultaat:
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.
Voorbeeld 5 – Voorafgaand aan SQL Server 2016
Voorafgaand aan SQL Server 2016, om te testen op het bestaan van een object, zou je zoiets als dit moeten doen:
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
Dat voorbeeld gebruikt DB_ID()
omdat we te maken hebben met een database. Als het object van een ander type was, moet u mogelijk de OBJECT_ID()
. gebruiken functie of iets heel anders.
Bijvoorbeeld:
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
Zodra we naar deze code gaan kijken, kunnen we zien waarom DROP IF EXISTS
is een welkome aanvulling op de T-SQL-syntaxis.
In aanmerking komende objecten
DIE kan op de volgende objecten worden gebruikt.
AGGREGAAT
PROCEDURE
TABEL
MONTAGE
ROL
TRIGGER
BEKIJK
REGEL
TYPE
DATABASE
SCHEMA
GEBRUIKER
STANDAARD
VEILIGHEIDSBELEID
BEKIJK
FUNCTIE
VOLGORDE
INDEX
SYNONIEM
Zoals vermeld, kan DIE ook worden gebruikt op kolommen en beperkingen bij gebruik van de ALTER TABLE
verklaring:
- WIJZIG TABEL DROP KOLOM INDIEN BESTAAT
- WIJZIG TABEL DROP BEPERKING INDIEN BESTAAT