I SQL Server, hvis du forsøger at slippe et objekt, der ikke eksisterer, får du en fejl. Hvis du ikke vil have en fejl, skal du tilføje noget ekstra kode for at kontrollere, om objektet findes.
Før SQL Server 2016 skulle du tilføje en IF
sætning, der forespurgte de relevante systemobjekter for at finde ud af, om objektet eksisterede eller ej.
Fra SQL Server 2016 kan du nu bruge en ny, renere metode til at kontrollere, om et objekt eksisterer. Vi kalder det DROP HVIS FINDER
(også kendt som "DIE").
Eksempel 1 – Grundlæggende syntaks
Syntaksen indeholder faktisk ikke DROP IF EXISTS
streng som den er. Det du skal gøre er at indsætte objekttypen mellem DROP
og HVIS
.
DROP TABLE IF EXISTS Customers
I dette tilfælde dropper jeg en tabel, så ordet TABLE
er indsat mellem DROP
og HVIS
. Navnet på den tabel, jeg vil slette (i dette tilfælde Kunder ) er placeret for enden.
Eksempel 2 – Grundlæggende demo
Her er et eksempel på at oprette en database, derefter droppe den og derefter forsøge at slippe den igen.
CREATE DATABASE Homer; GO DROP DATABASE IF EXISTS Homer; GO DROP DATABASE IF EXISTS Homer; GO
Resultat:
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.
Der opstår ingen fejl, selvom jeg forsøger at slippe et ikke-eksisterende objekt på den tredje linje.
Eksempel 3 – Uden HVIS EKSISTERER
Her er det igen, bortset fra at denne gang fjerner jeg
CREATE DATABASE Homer; GO DROP DATABASE Homer; GO DROP DATABASE Homer; GO
Resultat:
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.
I dette tilfælde får jeg en fejl, fordi den forsøger at slippe et objekt, der ikke eksisterer.
Eksempel 4 – Kolonner og begrænsninger
Du kan også bruge DIE på kolonner og begrænsninger.
For eksempel kan du bruge SLIP KOLONNE HVIS FINDER
i din ALTER TABLE
erklæring.
Her er et eksempel.
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
Resultat:
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.
Eksempel 5 – Før SQL Server 2016
Før SQL Server 2016, for at teste for et objekts eksistens, skal du gøre noget som dette:
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
Dette eksempel bruger DB_ID()
fordi vi har at gøre med en database. Hvis objektet var af en anden type, skal du muligvis bruge OBJECT_ID()
funktion eller noget helt andet.
For eksempel:
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
Når vi begynder at se på denne kode, kan vi se hvorfor DROP IF EXISTS
er en velkommen tilføjelse til T-SQL-syntaksen.
Kvalificerede objekter
DIE kan bruges på følgende objekter.
SAMLET | PROCEDURE | TABEL |
MONTERING | ROLLE | TRIGGER |
SE | REGEL | TYPE |
DATABASE | SKEMA | BRUGER |
STANDARD | SIKKERHEDSPOLITIK | SE |
FUNKTION | SEKVENS | |
INDEKS | SYNONYM |
Som nævnt kan DIE også bruges på kolonner og begrænsninger, når du bruger ALTER TABLE
erklæring:
- ÆNDRING AF TABELSLIP-KOLONNE HVIS FINDER
- ÆNDR TABELSLIP-BEGRÆNSNING, HVIS FINDER