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

5 modi per elencare le tabelle temporanee usando T-SQL

In SQL Server puoi utilizzare uno dei cinque modi seguenti per restituire un elenco di tabelle temporanee utilizzando Transact-SQL.

Questi restituiscono tabelle temporanee sia locali che globali.

Opzione 1 – sys.tables

Le sys.tables la visualizzazione del catalogo di sistema è progettata specificamente per la restituzione di informazioni sulla tabella.

SELECT name
FROM tempdb.sys.tables
WHERE name LIKE '#%';

Come per tutte le visualizzazioni in questa pagina, visto che desideriamo informazioni su temporanee tabelle, dobbiamo interrogare questa vista nel tempdb Banca dati. Possiamo farlo passando prima a quel database (in modo che sia il nostro database attuale) o qualificando la nostra query con il nome del database.

In questo esempio, qualifico la query con il nome del database.

Opzione 2 – sys.objects

Puoi anche usare sys.objects vista del catalogo di sistema. Se scegli questa opzione, dovrai filtrarla per tipo in modo che vengano restituite solo le tabelle utente.

SELECT name 
FROM tempdb.sys.objects
WHERE type = 'U';

Il U sta per "Tabella utente". Un modo alternativo per farlo è usare WHERE type_desc = 'USER_TABLE' .

Opzione 3 – INFORMAZIONE_SCHEMA.TABLES

Se desideri un'opzione standard ANSI, utilizza INFORMATION_SCHEMA.TABLES Visualizza. Se scegli questa opzione, dovrai anche filtrarla per tipo in modo che vengano restituite solo le "tabelle di base".

SELECT TABLE_NAME
FROM TempDB.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';

Opzione 4 – sp_tables

Se stai cercando un'opzione di stored procedure, sp_tables la procedura memorizzata farà il trucco.

USE tempdb;
EXEC sp_tables '#%';

Puoi anche includere esplicitamente i nomi degli argomenti.

USE tempdb;
EXEC sp_tables 
  @table_name = '#%',
  @table_owner = 'dbo',
  @table_qualifier = 'tempdb',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Noterai che sono passato a tempdb prima di eseguire questa procedura, anche se ho fornito il database come uno degli argomenti. Questo è effettivamente richiesto. Il @table_qualifier l'argomento deve corrispondere al database corrente.

Nota anche che il @fUsePattern pattern deve essere 1 in questo caso, perché sto usando un operatore jolly nel nome della tabella. Impostandolo su 1 abilita la corrispondenza del modello. Impostandolo su 0 disabiliterebbe la corrispondenza dei modelli.

Opzione 5 – dbo.sysobjects

Questa probabilmente non dovrebbe essere un'opzione, ma la elencherò comunque. Il dbo.sysobjects view è incluso solo in SQL Server per compatibilità con le versioni precedenti. È stato contrassegnato per il ritiro e Microsoft sconsiglia di utilizzarlo. Se lo incontri nel tuo codice, forse considera di cambiarlo in una delle opzioni precedenti.

In ogni caso, ecco come appare:

SELECT name
FROM tempdb..sysobjects
WHERE name LIKE '#%';

Se ti stai chiedendo a cosa serva il doppio punto (.. ), è un modo rapido per specificare lo schema predefinito. In questo caso, lo schema predefinito è dbo , quindi potremmo anche scrivere quanto segue:

SELECT name
FROM tempdb.dbo.sysobjects
WHERE name LIKE '#%';