I SQL Server, om du försöker släppa ett objekt som inte finns, får du ett felmeddelande. Om du inte vill få ett felmeddelande måste du lägga till lite extra kod för att kontrollera om objektet finns.
Före SQL Server 2016 behövde du lägga till en IF
uttalande som frågade de relevanta systemobjekten för att ta reda på om objektet existerade eller inte.
Från SQL Server 2016 kan du nu använda en ny, renare metod för att kontrollera om ett objekt finns. Vi kallar det SLÄPP OM FINNS
(även känd som "DIE").
Exempel 1 – Grundläggande syntax
Syntaxen innehåller faktiskt inte DROP IF EXISTS
sträng som den är. Vad du behöver göra är att infoga objekttypen mellan DROP
och OM
.
DROP TABLE IF EXISTS Customers
I det här fallet släpper jag en tabell, så ordet TABELL
infogas mellan DROP
och OM
. Namnet på tabellen jag vill ta bort (i det här fallet Kunder ) placeras i slutet.
Exempel 2 – Grundläggande demo
Här är ett exempel på att skapa en databas, sedan släppa den och sedan försöka släppa 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.
Inga fel uppstår, även om jag försöker släppa ett objekt som inte finns på den tredje raden.
Exempel 3 – Utan OM FINNS
Här är den igen, förutom att den här gången tar jag bort
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 det här fallet får jag ett felmeddelande, eftersom det försöker släppa ett objekt som inte finns.
Exempel 4 – Kolumner och begränsningar
Du kan också använda DIE på kolumner och begränsningar.
Du kan till exempel använda SLIPPA KOLUMN OM FINNS
i din ALTER TABLE
uttalande.
Här är ett exempel.
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.
Exempel 5 – Före SQL Server 2016
Innan SQL Server 2016, för att testa för ett objekts existens, måste du göra något så här:
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
Det exemplet använder DB_ID()
eftersom vi har att göra med en databas. Om objektet var av en annan typ kan du behöva använda OBJECT_ID()
funktion eller något helt annat.
Till exempel:
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 börjar titta på den här koden kan vi se varför DROP IF EXISTS
är ett välkommet tillägg till T-SQL-syntaxen.
Kvalificerade objekt
DIE kan användas på följande objekt.
SAMMANSLAG | PROCEDUR | TABELL |
MONTERING | ROLL | TRIGGER |
VISA | REGEL | TYP |
DATABAS | SCHEMA | ANVÄNDARE |
STANDARD | SÄKERHETSPOLICY | VISA |
FUNKTION | SEKVENS | |
INDEX | SYNONYM |
Som nämnts kan DIE även användas på kolumner och begränsningar när du använder ALTER TABLE
uttalande:
- ÄNDRA TABELL SLIPP KOLUMN OM FINNS
- ÄNDRAR TABELL DROP-BEGRÄNSNING OM FINNS