sql >> Database >  >> RDS >> Sqlserver

Een object laten STERVEN in SQL Server

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

  1. Hoe maak je een niet-null-beperking op een kolom in de SQL Server-tabel - SQL Server / T-SQL-zelfstudie, deel 51

  2. Python:mysqldb gebruiken om een ​​MySQL-tabel als woordenboek te importeren?

  3. Hoe SQL Server op Linux te installeren

  4. SQL MAX() voor beginners