Kaip naudoti „DROP IF EXISTS“ SQL serveryje?



Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas

Šiame straipsnyje aptariami „LAISĖTI, JEI BŪTŲ“ pareiškimas prieinamas SQL Server 2016 ir naujesnėse versijose. „IF EXIT“ yra naujausia neprivaloma sąlyga, įtraukta į esamą DROP sakinį SQL Server 2016 ir naujesnėse versijose. Iš esmės „LAISĖTI, JEI BŪTŲ“ parinktis naudojama, kai reikia patikrinti, ar objektas lieka duomenų bazėje, kol jis sukurtas ar numestas. Tokiu atveju pirmiausia numetame esamą duomenų bazės objektą ir, jei reikia, jį atkursime su pakeitimais.



Taigi, tai užkerta kelią senam „if condition“ rašymo būdui, o „if condition“ viduje - teiginio rašymui, norint patikrinti objekto buvimą, kad jį numestų. Jei to nebus, kitas paketo sakinys bus vykdomas toliau. Bet jei bandysime išmesti neegzistuojantį objektą, jis iškels klaidos pranešimą, kaip parodyta žemiau.



Vykdykite šią užklausą.



numesti stalą dbo.įmonė

Rezultatas bus toks.

Klaida atsiranda metant neegzistuojantį duomenų bazės objektą

Sintaksė

„DROP object_type [IF EXISTS] objekto_vardas“

Argumentai

OBJECT_TYPE:



Objekto tipas gali būti bet kas iš duomenų bazės, aktyviklio, surinkimo, sekos, rodyklės, lentelės, procedūrų rodinio, funkcijos ir kt.

JEI YRA:

Tai yra neprivaloma sąlyga ir, jei ji paminėta DROP sakinyje, ji patikrins objekto egzistavimą, jei jis egzistuoja, jis sumažės, kitaip jis ir toliau vykdys kitą sakinį bloke, nesukeldamas klaidų.

„SQL Server 2016“ įdiegę naują metodą „DROP IF EXISTS“, kūrėjai gali parašyti trumpą kodą.

Pirmiausia sukurkite duomenų bazę pavadinimu „appuals“.

Duomenų bazės kūrimas

Dabar sukursime lentelę, kuri bus numesta vykdant šį kodą.

naudoti [appuals] Go CREATE TABLE temp (id INT, vardas varchar (100)); EITI

Rezultatas bus toks.

Stalo kūrimas

Tada sukurkite parduotuvės procedūrą, kuri bus atsisakyta naudojant šį kodą.

NAUDOTI [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Sukurkite procedūrą [dbo]. [Sp_temp] KAIP PRADŽIA NUSTATYTI NOKO SUMĄ; SELECT * iš dbo.temp; GALAS

Išvestis bus tokia, kaip nurodyta toliau.

Parduotuvės procedūros kūrimas

Senas metodas: Prieš SQL serveriui naudojant drop, jei išeinama iš duomenų bazės objektų

Naudojant metodą DROP IF EXISTS prieš SQL Server 2016 reikėjo parašyti ilgą IF sakinių įvyniojimo kodą.

Nuvilkite lentelę, jei yra

Ankstesnis lentelės metimo būdas yra toks.

Jei mes naudojame „SQL Server 2015“ ar anksčiau, nei mums reikia vykdyti šią kodo grupę.

Jei (OBJECT_ID ('dbo.temp') nėra tuščias) Nuleiskite lentelės temp

Rezultatas bus toks.

Nuleisti stalą

Dabar jo sintaksė yra gana paini, todėl jei jums tai nepatinka ir naudojate „SQL Server 2016“ arba naujesnę versiją, galite ieškoti paprasto „DROP IF EXIST“ teiginio, o ne didelių įvyniojimų.

Išmeskite parduotuvės procedūrą, jei tokia yra:

Norėdami atsisakyti procedūros, turime parašyti sąlyginį teiginį, kad patikrintume, ar parduotuvės procedūra egzistuoja, ar ne, tada parašykite kritimo teiginį. Priešingu atveju tai sukels klaidą, jei saugomos procedūros nėra.

Dabar vykdykite šiuos teiginius, kad atsisakytumėte procedūros versijose, kurios yra žemesnės nei „SQL Server 2016“.

JEI BŪTŲ (PASIRINKITE 1 IŠ sys.procedures WHERE Name = 'sp_temp') NUMETIMO PROCEDŪRA dbo.sp_temp

Rezultatas bus toks.

Nuleiskite procedūrą naudodami senąjį if wrapper kodo metodą

Išmeskite duomenų bazę, jei yra:

Jei naudojate ankstesnes „SQL Server“ versijas, turite paleisti šį kodą, kad atsisakytumėte duomenų bazės.

JEI DB_ID („appuals“) NĖRA VISOS PRADŽIOS „DROP DATABASE“ programos baigiasi

Rezultatas bus toks.

Nuveskite duomenų bazę naudodami seną metodą

Naujas metodas: DROP IF EXISTS palaikomas „SQL Server 2016“ ir naujesnėse versijose

Norėdami mesti duomenų bazės objektą į SQL Server 2016 ir naujesnes versijas, turime atlikti paprastą sakinį.

Nuvilkite lentelę, jei yra:

Mes galime parašyti pareiškimą, kaip nurodyta toliau, „SQL Server 2016“, kad pašalintume saugomą lentelę, jei ji yra.

LAISYTI LENTEL IF, JEI BŪTŲ, dbo.temp

Rezultatas bus toks.

Nuvilkite lentelę naudodami naują metodą

Nuleidimo procedūra, jei yra:

Dabar mes atsisakysime išsaugotos procedūros, kurią sukūrėme straipsnio pradžioje, vykdydami šį kodą.

NURODYMO TVARKA, JEI BŪTŲ dbo.sp_temp

Išvestis bus tokia, kaip nurodyta toliau.

Nuvilkite lentelę naudodami naują metodą

Kalbant apie sintaksę, šis paprastas teiginys yra lengvai suprantamas ir lengvai įsimenamas. Panašiai mes galime atlikti tą pačią procedūrą, norėdami išmesti kitus duomenų bazės objektus.

Išmeskite duomenų bazę, jei yra:

Vykdykite šį kodą, jei norite atsisakyti duomenų bazės naudodami patikrą, jei yra

NAUDOKITE „MASTER GO DROP DATABASE“, JEI TURI „appuals“

Išvestis bus tokia, kaip nurodyta toliau.

Išmeskite duomenų bazę naudodami naują metodą

Šio metodo naudojimo pranašumas yra tas, kad jei duomenų bazės nėra, tai nesukels jokių klaidų, kitas paketo sakinys ir toliau bus vykdomas. Pabandykime iš naujo išmesti jau numestą duomenų bazę.

Klaida atsiranda iš naujo metant jau numestą duomenų bazę.

Panašiai iš duomenų bazės galime išmesti indeksus, rodinius, sekas, rinkinius ir kt.

3 minutes perskaityta