sql >> Databasteknik >  >> RDS >> Sqlserver

Gör ett objekt DÖ i SQL Server

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 OM FINNS del.

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

  1. SQLite datatyper

  2. Sammanfoga kolumnvärden till en kommaseparerad lista

  3. UPPDATERING med CASE och IN - Oracle

  4. SQLiteDatabase Cursor tom endast på enheter med Android 5.0+