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

4 modi per verificare se una tabella esiste prima di eliminarla in SQL Server (T-SQL)

Eliminare una tabella in SQL facile. Usa semplicemente DROP TABLE myTable dove myTable è il nome della tabella che vuoi eliminare. È possibile utilizzare questo metodo per eliminare una tabella in SQL Server tramite script T-SQL.

Ma riceverai un errore se la tabella non esiste effettivamente. Cioè, a meno che tu non controlli prima l'esistenza della tabella.

Di seguito sono riportati quattro modi per utilizzare T-SQL per verificare se la tabella esiste prima di eliminarla.

Opzione 1:IF EXISTS Clausola

Quando si utilizza SQL Server 2016 o versioni successive, è possibile utilizzare IF EXISTS clausola del DROP TABLE istruzione per verificare l'esistenza della tabella prima di provare a eliminarla:

DROP TABLE IF EXISTS t1;

Questo rilascia una tabella chiamata t1 se esiste.

Ecco il risultato dell'esecuzione dell'istruzione precedente quando la tabella esiste (e viene quindi eliminata):

Commands completed successfully.

Ed ecco cosa otteniamo se eseguiamo immediatamente di nuovo l'istruzione (cioè quando la tabella non esiste):

Commands completed successfully.

Stesso output. Quindi l'istruzione viene eseguita correttamente indipendentemente dal fatto che la tabella esista o meno.

Ecco cosa succede se proviamo a eliminare la tabella senza utilizzare IF EXISTS clausola:

DROP TABLE t1;

Risultato:

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

Opzione 2:verifica l'ID oggetto

In alternativa possiamo usare OBJECT_ID() funzione per verificare l'esistenza della tabella prima di provare a eliminarla:

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

L'esempio sopra controlla l'ID oggetto per un dbo.t1 tavolo. Il secondo argomento per OBJECT_ID() specifica il tipo di oggetto che stiamo cercando. In questo caso utilizziamo U , che sta per "tabella definita dall'utente".

Il OBJECT_ID() restituisce il numero di identificazione dell'oggetto database di un oggetto con ambito schema. Se l'oggetto esiste, non restituirà NULL e quindi possiamo eliminare la tabella. Se l'oggetto non lo fa esiste, o se non hai accesso ad essa, la funzione restituisce NULL e il DROP TABLE l'istruzione non verrà eseguita.

Opzione 3:query information_schema.tables

Un altro modo per verificare se una tabella esiste già è interrogare information_schema.tables visualizza:

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

Ciò fa una cosa simile all'esempio precedente; verifica l'esistenza della tabella e la crea solo se non esiste.

Opzione 4:interroga sys.tables

Possiamo anche interrogare sys.tables vista catalogo di sistema:

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 offre molti altri modi per verificare l'esistenza di tabelle. Vedere 6 modi per verificare se una tabella esiste in SQL Server per esempi.