Hvordan bruke DROP IF EXISTS i SQL Server?



Prøv Instrumentet Vårt For Å Eliminere Problemer

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.

Feilen oppstår når du slipper databaseobjektet som ikke eksisterer

Syntaks

“DROP object_type [IF EXISTS] object_name”

Argumenter

OBJECT_TYPE:



Objekttypen kan være hvem som helst fra databasen, utløseren, monteringen, sekvensen, indeksen, tabellen, prosedyrevisningen, funksjonen etc.

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'.

Opprette en database

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.

Tabelloppretting

Videre opprett 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 SETT ANTAL PÅ; VELG * fra dbo.temp; SLUTT

Resultatet blir som nedenfor.

Lagre prosedyreopprettelse

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-setningsinnpakningskode.

Slipp tabellen hvis det finnes

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

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

Hvis (OBJECT_ID ('dbo.temp') ikke er null) Drop Table temp

Resultatet blir som følger.

Å slippe bordet

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, så skriv slipputtalelsen. 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 prosedyren ved å bruke den gamle metoden for if wrapper code

Slipp databasen hvis den finnes:

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

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

Resultatet blir som følger.

Slipp databasen ved å bruke en gammel metode

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 tabellen ved å bruke den nye metoden

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.

Slipp tabellen ved å bruke den nye metoden

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

Slipp databasen hvis den finnes:

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

BRUK MASTER GO DROP DATABASE HVIS DET eksisterer appuals

Resultatet blir som nedenfor.

Slipp databasen ved å bruke den nye metoden

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

Feilen oppstår når den allerede slettede databasen slippes igjen.

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

3 minutter lest