Det er nemt at slippe en tabel i SQL. Du bruger blot DROP TABLE myTable
hvor myTable
er navnet på den tabel, du vil droppe. Du kan bruge denne metode til at slippe en tabel i SQL Server via T-SQL script.
Men du får en fejl, hvis tabellen faktisk ikke eksisterer. Det vil sige, medmindre du først tjekker, om tabellen findes.
Nedenfor er fire måder at bruge T-SQL til at kontrollere, om tabellen eksisterer, før du dropper den.
Mulighed 1:IF EXISTS
Klausul
Når du bruger SQL Server 2016 eller nyere, kan vi bruge IF EXISTS
klausul i DROP TABLE
sætning for at kontrollere, om tabellen findes, før vi forsøger at droppe den:
DROP TABLE IF EXISTS t1;
Dette fjerner en tabel kaldet t1
hvis den findes.
Her er resultatet af at køre ovenstående sætning, når tabellen eksisterer (og derfor slettes):
Commands completed successfully.
Og her er, hvad vi får, hvis vi straks kører erklæringen igen (dvs. når tabellen ikke eksisterer):
Commands completed successfully.
Samme output. Så sætningen kører med succes, uanset om tabellen eksisterer eller ej.
Her er, hvad der sker, hvis vi forsøger at droppe tabellen uden at bruge IF EXISTS
klausul:
DROP TABLE t1;
Resultat:
Msg 3701, Level 11, State 5, Line 1 Cannot drop the table 't1', because it does not exist or you do not have permission.
Mulighed 2:Tjek objekt-id'et
Vi kan alternativt bruge OBJECT_ID()
funktion til at kontrollere, om tabellen findes, før vi forsøger at droppe den:
IF OBJECT_ID(N'dbo.t1', N'U') IS NOT NULL
DROP TABLE dbo.t1;
GO
Ovenstående eksempel kontrollerer objekt-id'et for en dbo.t1
bord. Det andet argument til OBJECT_ID()
angiver den type objekt, vi leder efter. I dette tilfælde bruger vi U
, som er for "brugerdefineret tabel".
OBJECT_ID()
returnerer databaseobjektets identifikationsnummer for et skema-omfattet objekt. Hvis objektet eksisterer, vil det ikke returnere NULL, og derfor kan vi droppe tabellen. Hvis objektet ikke eksisterer, eller hvis du ikke har adgang til det, returnerer funktionen NULL og DROP TABLE
erklæring vil ikke køre.
Mulighed 3:Forespørgsel information_schema.tables
En anden måde at kontrollere, om en tabel allerede eksisterer på, er at forespørge information_schema.tables
se:
IF EXISTS (
SELECT * FROM information_schema.tables
WHERE table_schema = 'dbo' AND table_name = 't1')
DROP TABLE dbo.t1;
Det gør noget der ligner det forrige eksempel; den kontrollerer for eksistensen af tabellen og opretter den kun, hvis den ikke eksisterer.
Mulighed 4:Forespørgsel sys.tables
Vi kan også forespørge på sys.tables
systemkatalogvisning:
IF EXISTS (
SELECT * FROM sys.tables t
JOIN sys.schemas s ON (t.schema_id = s.schema_id)
WHERE s.name = 'dbo' AND t.name = 't1')
DROP TABLE dbo.t1;
SQL Server giver mange andre måder at kontrollere, om der findes tabeller. Se 6 måder at kontrollere, om der findes en tabel i SQL Server for eksempler.