Kaip naudoti „DROP IF EXISTS“ SQL serveryje?
Šiame straipsnyje aptariami „LAISĖTI, JEI BŪTŲ“ pareiškimas prieinamas SQL Server 2016 ir naujesnėse versijose. „JEI IŠĖJA“ 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 mes 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.imone
Rezultatas bus toks.
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“.
Dabar sukursime lentelę, kuri bus numesta vykdant šį kodą.
naudoti [appuals] Go CREATE TABLE temp (id INT, vardas varchar (100)); EITI
Rezultatas bus toks.
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 NOKOUMĄ; SELECT * iš dbo.temp; GALAS
Išvestis bus tokia, kaip nurodyta toliau.
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ų paketinių 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 atlikti šią kodo grupę.
Jei (OBJECT_ID ('dbo.temp') nėra tuščias) Nuleiskite lentelės temp
Rezultatas bus toks.
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 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, jei sukaupta procedūra neegzistuoja, ji sukels klaidą.
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.
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.
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.
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.
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 patikrinimą, jei yra
NAUDOKITE „MASTER GO DROP DATABASE“, JEI YRA APIE
Išvestis bus tokia, kaip nurodyta toliau.
Š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ę.
Panašiai iš duomenų bazės galime išmesti indeksus, rodinius, sekas, rinkinius ir kt.