sql >> Database teknologi >  >> RDS >> Sqlserver

Lav et objekt DØ i SQL Server

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 HVIS FINDER 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 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

  1. Er der et ANSI SQL-alternativ til søgeordet MYSQL LIMIT?

  2. Få en liste over alle borde i Oracle?

  3. Hold øje med en tabel nye poster i sql database

  4. MySQL LOG() Funktion – Returnerer den naturlige logaritme af en værdi