Ogni tanto mi ritrovo a digitare SHOW TABLES
in SQL Server, in attesa di ottenere un elenco di tabelle.
Avrebbe perfettamente senso se stessi usando MySQL o MariaDB. Ma SQL Server/T-SQL non ha un SHOW TABLES
come MySQL o MariaDB, quindi non funziona mai. E continuo a dimenticare. Ma fortunatamente SQL Server ha delle alternative.
Ecco cinque opzioni per ottenere un elenco di tabelle in SQL Server. Questi possono essere utilizzati ogni volta che stai cercando di trovare quell'inafferrabile SHOW TABLES
istruzione in SQL Server.
Opzione 1 – sys.tables
Le sys.tables
la vista del catalogo di sistema è progettata specificamente per restituire informazioni sulla tabella utente:
SELECT name
FROM sys.tables;
Questo restituisce il nome di tutte le tabelle utente nel database corrente. È possibile passare al database corretto anteponendo all'istruzione USE <database name>
dove <database name>
è il nome del database per cui vuoi elencare le tabelle.
Ad esempio, la seguente istruzione restituisce tutte le tabelle utente da KrankyKranes
banca dati:
USE KrankyKranes;
SELECT name
FROM sys.tables;
Puoi anche restituire lo schema se lo desideri:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
Qui ho usato SCHEMA_NAME()
funzione per tradurre il valore di schema_id
colonna nel nome effettivo dello schema.
Opzione 2 – sys.objects
Puoi anche usare sys.objects
vista del catalogo di sistema. Se scegli questa opzione, puoi filtrarla per tipo in modo che vengano restituite solo le tabelle utente:
SELECT name
FROM sys.objects
WHERE type = 'U';
Questo restituisce le tabelle utente dal database corrente. Questa vista contiene anche un schema_id
colonna, quindi puoi utilizzare SCHEMA_NAME()
funzione per tradurlo nel nome dello schema, se necessario.
Opzione 3 – information_schema.tables
Il INFORMATION_SCHEMA.TABLES
view restituisce una riga per ogni tabella o vista nel database corrente per cui l'utente corrente dispone delle autorizzazioni.
Possiamo filtrare questa vista per tipo in modo che vengano restituite solo le tabelle di base:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
Il TABLE_SCHEMA
contiene il nome dello schema della tabella, quindi non è necessario utilizzare SCHEMA_NAME()
funzione per convertire l'ID dello schema nel suo nome.
Opzione 4 – sp_tables
Le sp_tables
stored procedure restituisce un elenco di oggetti che possono essere interrogati nell'ambiente corrente. Ciò significa qualsiasi tabella o vista, ad eccezione degli oggetti sinonimo.
Il modo più rapido e semplice per chiamare questa procedura è questo:
sp_tables;
Ma ciò può restituire un lungo elenco di oggetti.
Di solito è meglio essere più specifici. Ad esempio:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
Qui sto spiegando la procedura per mostrare le tabelle utente nei KrankyKranes
database di proprietà di dbo
.
Il @table_type
argomento accetta un elenco di valori separato da virgole. Quindi, se volessimo includere le visualizzazioni, potremmo fare quanto segue:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
Opzione 5 – dbo.sysobjects
Prima di SQL Server 2005, dbo.sysobjects
view era la vista per mostrare tabelle e altri oggetti.
Quindi, se stai utilizzando una vecchia edizione di SQL Server, puoi farlo:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';