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

SQL Server MOSTRA TABELLE Equivalente

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