Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoyer une liste de tables et de vues dans SQL Server à l'aide de T-SQL (sp_tables)

Dans SQL Server, vous pouvez utiliser les sp_tables procédure stockée système pour obtenir une liste des tables et des vues dans l'environnement actuel.

Vous pouvez renvoyer toutes les tables et vues, ou vous pouvez les restreindre à un propriétaire, un type, un modèle ou même une table ou une vue spécifique.

Syntaxe

La syntaxe ressemble à ceci :

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

Tous les arguments sont facultatifs.

Exemple 1 – Aucun argument

Vous pouvez exécuter cette procédure stockée sans aucun argument. Cela renverra toutes les tables et vues dans l'environnement actuel.

Comme ceci :

EXEC sp_tables;

Cela renvoie plus de 500 lignes sur mon système, donc je ne fournirai pas les résultats ici. En plus de renvoyer des tables et des vues définies par l'utilisateur, il renvoie également des objets système, tels que sys et INFORMATION_SCHEMA tables et vues.

Exemple 2 – Tous les arguments

À l'autre extrême, voici un exemple qui inclut tous les arguments. Cela réduit les résultats à un nom de table spécifique, un type spécifique, un qualificatif spécifique et un propriétaire spécifique.

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

Résultat :

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

Exemple 3 - Renvoyer une table spécifique

Un moyen plus simple de renvoyer une table spécifique consiste à utiliser simplement le premier argument.

Comme ceci :

EXEC sp_tables @table_name = 'Customers';

Ou encore plus concis, comme l'un de ceux-ci :

EXEC sp_tables 'Customers';
sp_tables 'Customers';

Cependant, sachez que vous pourriez obtenir plus d'une ligne. Dans cet exemple, deux lignes sont renvoyées :

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

La première ligne est pour une table et la deuxième ligne est pour une vue.

Si je n'étais pas intéressé à voir des vues ou des tables système, je pourrais ajouter un argument supplémentaire pour spécifier le type de table.

Exemple 4 - Renvoyer un type de table spécifique

Ici, j'affine l'exemple précédent, en spécifiant uniquement le type de table qui m'intéresse, ainsi que le nom de la table.

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

Résultat :

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

Les types acceptables incluent VIEW , TABLE , et SYSTEMTABLE .

Notez que les types de tableau doivent être en majuscules.

Exemple 5 – Renvoyer plusieurs types de table

Vous avez peut-être remarqué que la syntaxe du type de tableau utilise des guillemets simples et double citation. En effet, il accepte une liste de types de table séparés par des virgules. La liste entière est entourée de guillemets doubles et chaque élément de la liste est entouré de guillemets simples, une virgule séparant chaque élément.

Voici un exemple de retour des types de table TABLE et VIEW .

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

Notez que si SET QUOTED_IDENTIFIER est ON , chaque guillemet simple doit être doublé et l'ensemble du paramètre doit être placé entre guillemets simples.

Exemple 6 - Remarque sur l'argument qualificatif de table

Si vous utilisez le @table_qualifier argument, sa valeur doit être la même que celle de l'environnement actuel, sinon vous obtiendrez une erreur. Dans SQL Server, le qualificateur de table représente le nom de la base de données. Dans certains produits, il représente le nom du serveur de l'environnement de base de données de la table.

Voici ce qui se passe dans SQL Server si j'utilise une valeur différente de la base de données actuelle :

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

Résultat :

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.

Exemple 7 – Caractères génériques

Vous pouvez utiliser le @fUsePattern argument pour spécifier si le trait de soulignement ( _ ), pourcentage ( % ) et parenthèse ( [ ou ] ) sont interprétés comme des caractères génériques. Les valeurs valides sont 0 (la correspondance de modèle est désactivée) et 1 (la correspondance des motifs est activée). La valeur par défaut est 1 .

Voici un exemple d'utilisation de la correspondance de modèles pour renvoyer des noms de table commençant par la lettre "A" :

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

Résultat :

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

Mais voici ce qui se passe si je désactive la correspondance de modèle :

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

Résultat :

(0 rows affected)