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 '#%';