sql >> Database >  >> RDS >> Sqlserver

4 manieren om te controleren of een tabel bestaat voordat u deze in SQL Server (T-SQL) laat vallen

Eenvoudig een tabel in SQL laten vallen. Je gebruikt gewoon DROP TABLE myTable waar myTable is de naam van de tafel die u wilt laten vallen. U kunt deze methode gebruiken om een ​​tabel in SQL Server te laten vallen via een T-SQL-script.

Maar u krijgt een foutmelding als de tabel niet echt bestaat. Dat wil zeggen, tenzij u eerst controleert of de tabel bestaat.

Hieronder staan ​​vier manieren om T-SQL te gebruiken om te controleren of de tabel bestaat voordat deze wordt verwijderd.

Optie 1:De IF EXISTS Clausule

Bij gebruik van SQL Server 2016 of later kunnen we de IF EXISTS . gebruiken clausule van de DROP TABLE statement om te controleren op het bestaan ​​van de tabel voordat we deze proberen te verwijderen:

DROP TABLE IF EXISTS t1;

Dit laat een tabel met de naam t1 vallen als het bestaat.

Hier is het resultaat van het uitvoeren van de bovenstaande instructie wanneer de tabel bestaat (en daarom is verwijderd):

Commands completed successfully.

En dit is wat we krijgen als we de instructie onmiddellijk opnieuw uitvoeren (d.w.z. wanneer de tabel niet bestaat):

Commands completed successfully.

Zelfde uitgang. Dus de instructie wordt met succes uitgevoerd, of de tabel nu bestaat of niet.

Dit is wat er gebeurt als we proberen de tafel te laten vallen zonder de IF EXISTS clausule:

DROP TABLE t1;

Resultaat:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't1', because it does not exist or you do not have permission.

Optie 2:Controleer de Object-ID

We kunnen ook de OBJECT_ID() . gebruiken functie om te controleren of de tabel bestaat voordat we hem proberen te verwijderen:

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

Het bovenstaande voorbeeld controleert de object-ID voor een dbo.t1 tafel. Het tweede argument voor OBJECT_ID() specificeert het type object waarnaar we op zoek zijn. In dit geval gebruiken we U , wat voor "door de gebruiker gedefinieerde tabel" is.

De OBJECT_ID() retourneert het identificatienummer van het databaseobject van een object met een schemabereik. Als het object bestaat, retourneert het geen NULL en daarom kunnen we de tabel laten vallen. Als het object niet bestaat, of als je er geen toegang toe hebt, retourneert de functie NULL, en de DROP TABLE instructie wordt niet uitgevoerd.

Optie 3:Query information_schema.tables

Een andere manier om te controleren of een tabel al bestaat, is door de information_schema.tables . op te vragen bekijken:

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

Dat doet hetzelfde als het vorige voorbeeld; het controleert op het bestaan ​​van de tabel en maakt het alleen aan als het niet bestaat.

Optie 4:Query sys.tables

We kunnen ook de sys.tables . opvragen systeemcatalogusweergave:

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 biedt vele andere manieren om te controleren op het bestaan ​​van tabellen. Zie 6 manieren om te controleren of een tabel bestaat in SQL Server voor voorbeelden.


  1. gem install:kan de native extensie van gem niet bouwen (kan header-bestanden niet vinden)

  2. Opgeslagen Oracle-procedure aanroepen vanuit C#?

  3. Een opgeslagen procedure maken in SQL Server

  4. Enterprise Manager 11g FMW-besturing in R12.2