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

Restituire un elenco di tabelle e viste in SQL Server utilizzando T-SQL (sp_tables)

In SQL Server puoi utilizzare sp_tables stored procedure di sistema per ottenere un elenco di tabelle e viste nell'ambiente corrente.

Puoi restituire tutte le tabelle e le viste oppure restringere il campo a un particolare proprietario, tipo, modello o persino una tabella o vista specifica.

Sintassi

La sintassi è questa:

sp_tables [ [ @table_name = ] 'name' ]   
     [ , [ @table_owner = ] 'owner' ]   
     [ , [ @table_qualifier = ] 'qualifier' ]   
     [ , [ @table_type = ] "type" ]   
     [ , [@fUsePattern = ] 'fUsePattern'];

Tutti gli argomenti sono facoltativi.

Esempio 1 – Nessun argomento

È possibile eseguire questa procedura memorizzata senza alcun argomento. In questo modo verranno restituite tutte le tabelle e le viste nell'ambiente corrente.

In questo modo:

EXEC sp_tables;

Questo restituisce oltre 500 righe sul mio sistema, quindi non fornirò i risultati qui. Oltre a restituire tabelle e viste definite dall'utente, restituisce anche oggetti di sistema, come sys e INFORMATION_SCHEMA tabelle e viste.

Esempio 2 – Tutti gli argomenti

All'altro estremo, ecco un esempio che include tutti gli argomenti. Ciò restringe i risultati a un nome di tabella specifico, un tipo specifico, un qualificatore specifico e un proprietario specifico.

EXEC sp_tables
  @table_name = 'Customers',
  @table_owner = 'Sales',
  @table_qualifier = 'WideWorldImporters',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Risultato:

+--------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|--------------------+---------------+--------------+--------------+-----------|
| WideWorldImporters | Sales         | Customers    | TABLE        | NULL      |
+--------------------+---------------+--------------+--------------+-----------+

Esempio 3:restituire una tabella specifica

Un modo più semplice per restituire una tabella specifica consiste nell'utilizzare semplicemente il primo argomento.

In questo modo:

EXEC sp_tables @table_name = 'Customers';

O ancora più concisamente, come uno di questi:

EXEC sp_tables 'Customers';
sp_tables 'Customers';

Tuttavia, tieni presente che potresti ottenere più di una riga. In questo esempio vengono restituite due righe:

+--------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|--------------------+---------------+--------------+--------------+-----------|
| WideWorldImporters | Sales         | Customers    | TABLE        | NULL      |
| WideWorldImporters | Website       | Customers    | VIEW         | NULL      |
+--------------------+---------------+--------------+--------------+-----------+

La prima riga è per una tabella e la seconda riga è per una vista.

Se non fossi interessato a visualizzare viste o tabelle di sistema, potrei aggiungere un altro argomento per specificare il tipo di tabella.

Esempio 4:restituire un tipo di tabella specifico

Qui, perfeziono l'esempio precedente, specificando solo il tipo di tabella che mi interessa, insieme al nome della tabella.

EXEC sp_tables 
  @table_name = 'Customers',
  @table_type = "'TABLE'";

Risultato:

+--------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|--------------------+---------------+--------------+--------------+-----------|
| WideWorldImporters | Sales         | Customers    | TABLE        | NULL      |
+--------------------+---------------+--------------+--------------+-----------+

I tipi accettabili includono VIEW , TABLE e SYSTEMTABLE .

Tieni presente che i tipi di tabella devono essere maiuscoli.

Esempio 5 – Restituire più tipi di tabelle

Potresti aver notato che la sintassi per il tipo di tabella utilizza virgolette singole e virgolette. Questo perché accetta un elenco di tipi di tabella separati da virgole. L'intero elenco è racchiuso tra virgolette doppie e ogni elemento dell'elenco è racchiuso tra virgolette singole, con una virgola che separa ogni elemento.

Ecco un esempio di restituzione dei tipi di tabella TABLE e VIEW .

EXEC sp_tables 
  @table_type = "'TABLE','VIEW'";

Nota che se SET QUOTED_IDENTIFIER è ON , ogni singola virgoletta deve essere raddoppiata e l'intero parametro deve essere racchiuso tra virgolette singole.

Esempio 6:una nota sull'argomento del qualificatore di tabella

Se usi il @table_qualifier argomento, il suo valore deve essere lo stesso dell'ambiente corrente, altrimenti verrà visualizzato un errore. In SQL Server, il qualificatore di tabella rappresenta il nome del database. In alcuni prodotti, rappresenta il nome del server dell'ambiente di database della tabella.

Ecco cosa succede in SQL Server se utilizzo un valore diverso dal database corrente:

USE Music;
EXEC sp_tables 
  @table_qualifier = 'WideWorldImporters';

Risultato:

Msg 15250, Level 16, State 1, Procedure sp_tables, Line 86
The database name component of the object qualifier must be the name of the current database.

Esempio 7 – Caratteri jolly

Puoi usare il @fUsePattern argomento per specificare se il carattere di sottolineatura ( _ ), percentuale ( % ) e parentesi ( [ o ] ) i caratteri vengono interpretati come caratteri jolly. I valori validi sono 0 (la corrispondenza del modello è disattivata) e 1 (la corrispondenza del modello è attiva). Il valore predefinito è 1 .

Ecco un esempio di utilizzo della corrispondenza dei modelli per restituire nomi di tabelle che iniziano con la lettera "A":

EXEC sp_tables
  @table_name = 'A%',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Risultato:

+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| Music             | dbo           | Albums       | TABLE        | NULL      |
| Music             | dbo           | Artists      | TABLE        | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

Ma ecco cosa succede se disabilito la corrispondenza dei modelli:

EXEC sp_tables
  @table_name = 'A%',
  @table_type = "'TABLE'",
  @fUsePattern = 0;

Risultato:

(0 rows affected)