sql >> Databasteknik >  >> RDS >> Sqlserver

4 sätt att kontrollera om en tabell finns innan du släpper den i SQL Server (T-SQL)

Att släppa en tabell i SQL enkelt. Du använder helt enkelt DROP TABLE myTable där myTable är namnet på tabellen du vill släppa. Du kan använda den här metoden för att släppa en tabell i SQL Server via T-SQL-skript.

Men du får ett felmeddelande om tabellen faktiskt inte finns. Det vill säga om du inte kontrollerar om tabellen finns först.

Nedan finns fyra sätt att använda T-SQL för att kontrollera om tabellen existerar innan du släpper den.

Alternativ 1:IF EXISTS Klausul

När vi använder SQL Server 2016 eller senare kan vi använda koden IF EXISTS sats i DROP TABLE uttalande för att kontrollera om tabellen finns innan vi försöker släppa den:

DROP TABLE IF EXISTS t1;

Detta tar bort en tabell som heter t1 om det finns.

Här är resultatet av att köra ovanstående uttalande när tabellen existerar (och därför tas bort):

Commands completed successfully.

Och här är vad vi får om vi omedelbart kör uttalandet igen (dvs. när tabellen inte finns):

Commands completed successfully.

Samma utgång. Så satsen körs framgångsrikt oavsett om tabellen existerar eller inte.

Här är vad som händer om vi försöker släppa tabellen utan att använda 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.

Alternativ 2:Kontrollera objekt-ID:t

Vi kan alternativt använda OBJECT_ID() funktion för att kontrollera om tabellen finns innan vi försöker släppa den:

IF OBJECT_ID(N'dbo.t1', N'U') IS NOT NULL
DROP TABLE dbo.t1;
GO

Exemplet ovan kontrollerar objekt-ID för en dbo.t1 tabell. Det andra argumentet till OBJECT_ID() anger vilken typ av objekt vi letar efter. I det här fallet använder vi U , vilket är för "användardefinierad tabell".

OBJECT_ID() returnerar databasobjektets identifieringsnummer för ett objekt med schemaomfattning. Om objektet finns kommer det inte att returnera NULL, och därför kan vi släppa tabellen. Om objektet inte gör det existerar, eller om du inte har tillgång till den, returnerar funktionen NULL och DROP TABLE uttalandet kommer inte att köras.

Alternativ 3:Fråga information_schema.tables

Ett annat sätt att kontrollera om en tabell redan finns är att fråga information_schema.tables visa:

IF EXISTS (
    SELECT * FROM information_schema.tables
    WHERE table_schema = 'dbo' AND table_name = 't1') 	
    DROP TABLE dbo.t1;

Det gör något liknande det föregående exemplet; den kontrollerar om tabellen finns och skapar den bara om den inte finns.

Alternativ 4:Fråga sys.tables

Vi kan också fråga sys.tables systemkatalogvy:

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 tillhandahåller många andra sätt att kontrollera om det finns tabeller. Se 6 sätt att kontrollera om en tabell finns i SQL Server för exempel.


  1. Skapa en ODBC-länkad server utan att konfigurera en datakälla

  2. Hur man inaktiverar alla utlösare i SQL Server Database

  3. TO_YMINTERVAL() Funktion i Oracle

  4. Fästa tabell i Flash-cachen