Hvordan bruke DROP IF EXISTS i SQL Server?

Denne artikkelen diskuterer “DROP IF EXISTS” uttalelse tilgjengelig i SQL Server 2016 og senere versjoner. “HVIS UTGÅR” er den siste valgfrie klausulen lagt til i den eksisterende DROP-setningen i SQL Server 2016 og senere versjoner. I hovedsak er det “DROP IF EXISTS” alternativet brukes når det er nødvendig å sjekke om en enhet forblir i en database før den opprettes eller slippes. I dette tilfellet vil vi først slippe det eksisterende databaseobjektet og deretter gjenskape det med endringer om nødvendig.

Dermed forhindrer det den gamle måten å skrive hvis tilstand og inne i hvis tilstanden skriver en uttalelse for å teste objektets tilstedeværelse for å slippe den. Hvis det ikke skjer, vil neste setning i batchen fortsette å bli utført. Men hvis vi prøver å slippe et objekt som ikke eksisterer, vil det gi en feilmelding som vist nedenfor.

Utfør følgende spørring.

drop table dbo.company

Resultatet blir slik.

Syntaks

“DROP object_type [IF EXISTS] object_name”

Argumenter

OBJECT_TYPE:

Objekttypen kan være hvem som helst fra databasen, trigger, montering, sekvens, indeks, tabell, prosedyrevisning, funksjon osv.

HVIS EKSISTERER:

Det er en valgfri klausul, og hvis den er nevnt i DROP-setningen, vil den kontrollere objektets eksistens, hvis den eksisterer vil den falle, ellers vil den fortsette å utføre neste setning i blokken uten å produsere noen feil.

Nå med introduksjonen av den nye metoden “DROP IF EXISTS” i SQL Server 2016 kan utviklere skrive kort kode.

Først oppretter du en database som heter “appuals”.

Nå vil vi lage en tabell som skal slippes ved å utføre følgende kode.

bruk [appuals] Go CREATE TABLE temp (id INT, name varchar (100)); GÅ

Resultatet blir som følger.

Videre oppretter du en butikkprosedyre som skal slippes ved hjelp av følgende kode.

BRUK [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Opprett PROSEDYRE [dbo]. [Sp_temp] SOM BEGYNN INNSTILL NOCOUNT ON; VELG * fra dbo.temp; SLUTT

Resultatet blir som nedenfor.

Gammel metode: Før SQL Server bruker drop if exits på databaseobjekter

Å bruke DROP IF EXISTS-metoden før SQL Server 2016 krevde å skrive langvarig IF-setningskode.

Slipp tabellen hvis det finnes

Den tidligere metoden for å droppe en tabell er som følger.

Hvis vi bruker SQL Server 2015 eller tidligere, må vi utføre følgende haug med kode.

Hvis (OBJECT_ID ('dbo.temp') ikke er null) fall tabeltemp

Resultatet blir som følger.

Nå er syntaksen ganske forvirrende, så hvis du ikke liker det og du bruker SQL Server 2016 eller nyere, kan du gå for enkel DROP IF EXIST-setning i stedet for store innpakninger.

Slipp butikkprosedyre hvis det finnes

For å slippe prosedyren, må vi skrive en betinget uttalelse for å sjekke om butikkprosedyren eksisterer eller ikke, og deretter skrive slipperklæringen. Ellers vil det føre til en feil i tilfelle den lagrede prosedyren ikke eksisterer.

Utfør nå følgende utsagn for å slippe prosedyren i versjoner som er lavere enn SQL Server 2016.

HVIS EKSISTERER (VELG 1 FRA sys.prosedyrer HVOR Navn = 'sp_temp') FALLPROSEDYRE dbo.sp_temp

Resultatet blir slik.

Slipp databasen hvis den finnes:

Hvis du bruker tidligere versjoner av SQL Server, må du utføre følgende kode for å slippe databasen.

HVIS DB_ID ('appuals') IKKE er NULL BEGIN DROP DATABASE appuals SLUT

Resultatet blir som følger.

Ny metode: DROP IF EXISTS støttes i SQL Server 2016 og nyere versjon

For å slippe et databaseobjekt i SQL Server 2016 og over, må vi utføre en enkel uttalelse.

Slipp bord hvis det finnes:

Vi kan skrive en uttalelse som nedenfor i SQL Server 2016 for å fjerne en lagret tabell hvis den eksisterer.

SLIP TABELL HVIS DET FINNES dbo.temp

Resultatet blir slik.

Slipp prosedyre hvis det finnes:

Nå slipper vi den lagrede prosedyren vi opprettet i begynnelsen av artikkelen ved å utføre følgende kode.

SLIPPROSEDYRE HVIS DET FINNES dbo.sp_temp

Resultatet blir som nedenfor.

Når det gjelder syntaksen, er denne enkle uttalelsen lett å forstå og lett å huske. På samme måte kan vi følge den samme prosedyren for å slippe andre databaseobjekter.

Slipp databasen hvis den finnes:

Utfør følgende kode hvis du vil droppe databasen ved å bruke hvis det finnes

BRUK MASTER GO DROP DATABASE HVIS DET FINNER appuals

Resultatet blir som nedenfor.

Fordelen med å bruke denne metoden er at hvis databasen ikke eksisterer, vil den ikke forårsake noen feil, vil neste setning i batchen fortsette å bli kjørt. La oss prøve å slippe den allerede droppede databasen på nytt.

På samme måte kan vi slippe indekser, visninger, sekvenser, samlinger, etc. fra databasen.


$config[zx-auto] not found$config[zx-overlay] not found