Hur använder jag DROP IF EXISTS i SQL Server?



Prova Vårt Instrument För Att Eliminera Problem

Denna artikel diskuterar “DROP IF EXISTS” uttalande tillgängligt i SQL Server 2016 och senare versioner. “OM UTGÅNG” är den senaste valfria klausulen som lagts till i det befintliga DROP-uttalandet i SQL Server 2016 och senare versioner. I huvudsak är den “DROP IF EXISTS” alternativet används när det är nödvändigt att kontrollera om en enhet finns kvar i en databas innan den skapas eller släpps. I det här fallet släpper vi först det befintliga databasobjektet och återskapar det med ändringar om det behövs.



Således förhindrar det det gamla sättet att skriva om villkor och inuti om villkoret skriver ett uttalande för att testa objektets närvaro för att släppa det. Om det inte sker fortsätter nästa uttalande i batchen att köras. Men om vi försöker släppa ett objekt som inte finns kommer det att ta upp ett felmeddelande som visas nedan.



Utför följande fråga.



släpp tabell dbo.company

Resultatet blir så här.

Felet uppstår när databasobjektet som inte existerar släpps

Syntax

“DROP objekt_typ [OM EXISTS] objekt_namn”

Argument

OBJECT_TYPE:



Objekttypen kan vara vem som helst från databasen, utlösaren, monteringen, sekvensen, indexet, tabellen, procedurvyn, funktionen etc.

OM FUNGERAR:

Det är en valfri klausul och om det nämns i DROP-uttalandet kommer det att kontrollera objektets existens, om det finns kommer det att släppa, annars fortsätter det att köra nästa uttalande i blocket utan att producera några fel.

Nu med introduktionen av den nya metoden 'DROP IF EXISTS' i SQL Server 2016 kan utvecklare skriva kort kod.

Skapa först en databas med namnet “appuals”.

Skapa en databas

Nu skapar vi en tabell som ska släppas genom att köra följande kod.

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

Produktionen blir följande.

Skapa bord

Skapa vidare en butiksprocedur som ska tappas med följande kod.

ANVÄND [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Skapa PROCEDUR [dbo]. [Sp_temp] AS BEGIN SET NOCOUNT ON; VÄLJ * från dbo.temp; SLUTET

Resultatet blir som nedan.

Lagra procedur skapande

Gammal metod: Innan SQL Server använder drop if exits på databasobjekt

Att använda DROP IF EXISTS-metoden före SQL Server 2016 krävde att du skriver långa IF-satsomslagskoder.

Tappa tabell om det finns

Den tidigare metoden att tappa en tabell är som följer.

Om vi ​​använder SQL Server 2015 eller tidigare måste vi köra följande kodkod.

Om (OBJECT_ID ('dbo.temp') inte är noll) Drop Table temp

Produktionen blir följande.

Tappar bordet

Nu är syntaxen ganska förvirrande, så om du inte gillar det och du använder SQL Server 2016 eller högre kan du gå till ett enkelt DROP IF EXIST-uttalande istället för stora omslag.

Procedur för att släppa butik

För att avbryta proceduren måste vi skriva ett villkorligt uttalande för att kontrollera om butiksproceduren existerar eller inte, skriv sedan dropputtrycket. I annat fall kommer det att leda till ett fel om den lagrade proceduren inte finns.

Kör nu följande uttalanden för att släppa proceduren i versioner lägre än SQL Server 2016.

OM EXISTS (VÄLJ 1 FRÅN sys.procedures WHERE Name = 'sp_temp') DROP PROCEDURE dbo.sp_temp

Resultatet blir så här.

Släpp proceduren med den gamla metoden för if-omslagskod

Släpp databas om det finns:

Om du använder tidigare versioner av SQL Server måste du köra följande kod för att släppa databasen.

OM DB_ID ('appuals') INTE är NULL BEGIN DROP DATABASE appuals SLUT

Produktionen blir följande.

Släpp databasen med en gammal metod

Ny metod: DROP IF EXISTS stöds i SQL Server 2016 och senare version

För att släppa ett databasobjekt i SQL Server 2016 och uppåt måste vi utföra ett enkelt uttalande.

Släpp tabell om det finns:

Vi kan skriva ett uttalande enligt nedan i SQL Server 2016 för att ta bort en lagrad tabell om den finns.

DROP TABELL OM FÖRSTÅR ​​dbo.temp

Resultatet blir så här.

Släpp tabellen med den nya metoden

Tappförfarande om det finns:

Nu släpper vi den lagrade proceduren som vi skapade i början av artikeln genom att köra följande kod.

DROPFÖRFARANDE OM DET FINNER dbo.sp_temp

Resultatet blir som nedan.

Släpp tabellen med den nya metoden

När det gäller syntax är detta enkla uttalande lätt att förstå och lätt att komma ihåg. På samma sätt kan vi följa samma procedur för att släppa andra databasobjekt.

Släpp databas om det finns:

Kör följande kod om du vill släppa databasen med hjälp av om det finns en kontroll

ANVÄND MASTER GO DROP-DATABAS OM FUNGERAR enskilda

Resultatet blir som nedan.

Släpp databasen med den nya metoden

Fördelen med att använda den här metoden är att om databasen inte finns kommer den inte att orsaka något fel, nästa uttalande i batchen kommer att fortsätta att köras. Låt oss försöka släppa den redan tappade databasen.

Felet uppstår när den redan tappade databasen släpps igen.

På samma sätt kan vi släppa index, vyer, sekvenser, sammansättningar etc. från databasen.

3 minuter läst