sql >> Database teknologi >  >> RDS >> Sqlserver

4 måder at kontrollere, om en tabel eksisterer, før du dropper den i SQL Server (T-SQL)

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.


  1. Forældet:mysql_connect()

  2. Sletning af dublerede rækker fra en tabel

  3. SELECT-listen er ikke i GROUP BY-sætning og indeholder ikke-aggregeret kolonne .... inkompatibel med sql_mode=only_full_group_by

  4. Bemærk:Konvertering af matrix til streng i