Dans SQL Server, vous pouvez utiliser le sp_tables_ex
procédure stockée système pour renvoyer des informations sur les tables à partir d'un serveur lié spécifié.
Le moyen le plus simple d'exécuter cette procédure stockée consiste à transmettre le nom du serveur lié. Cela renverra toutes les tables de la base de données par défaut sur le serveur lié spécifié, y compris les tables système et les vues. Cela pourrait être une longue liste.
Vous avez également la possibilité de spécifier une base de données différente et/ou un schéma de table spécifique. Vous pouvez également filtrer les résultats en fonction du type de table (par exemple, table, vue, table système, etc.).
Syntaxe
La syntaxe ressemble à ceci :
sp_tables_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [ @table_type = ] 'table_type' ] [ , [@fUsePattern = ] 'fUsePattern' ]
Le @table_server
argument est le seul argument requis. Il s'agit du nom du serveur lié à partir duquel vous souhaitez obtenir les informations de la table.
Les autres arguments sont facultatifs et je les couvre dans les exemples suivants. Pour plus d'informations sur ces arguments, consultez la documentation de Microsoft.
Exemple 1 – Renvoyer toutes les tables
L'exemple suivant renvoie toutes les tables, vues, tables système, alias, etc. de la base de données par défaut sur le serveur lié appelé Homer.
EXEC sp_tables_ex 'Homer';
Cela renvoie des centaines de lignes sur mon système, donc je ne listerai pas les résultats dans cet exemple. Gardez à l'esprit que la plupart de ces lignes sont des tables système et des vues système.
Cela pourrait aussi être fait comme ceci :
EXEC sp_tables_ex @table_server = 'Homer';
Exemple 2 - Spécifier une autre base de données
L'exemple suivant spécifie que le WideWorldImportersDW
base de données doit être utilisée.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW';
Encore une fois, cela renvoie des centaines de lignes, donc je ne listerai pas les résultats.
Exemple 3 - Renvoyer une table spécifique
Dans cet exemple, je renvoie des informations sur une table spécifique.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'Music', @table_name = 'Artists';
Résultats :
+-------------+---------------+--------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------+---------------+--------------+--------------+-----------| | Music | dbo | Artists | TABLE | NULL | +-------------+---------------+--------------+--------------+-----------+
Exemple 4 – Retourner uniquement les vues
Dans cet exemple, je précise que seules les vues doivent être renvoyées.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'Music', @table_type = 'VIEW';
Résultats :
+-------------+---------------+--------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------+---------------+--------------+--------------+-----------| | Music | dbo | BluesAlbums | VIEW | NULL | | Music | dbo | JazzAlbums | VIEW | NULL | | Music | dbo | RockAlbums | VIEW | NULL | +-------------+---------------+--------------+--------------+-----------+
Notez que ceux-ci n'incluent pas les vues système. Si je voulais retourner les vues système, j'aurais utilisé @table_type = 'SYSTEM VIEW'
(et le jeu de résultats serait beaucoup plus grand).
Le @table_type
l'argument accepte les types suivants :ALIAS
, GLOBAL TEMPORARY
, LOCAL TEMPORARY
, SYNONYM
, SYSTEM TABLE
, SYSTEM VIEW
, TABLE
, et VIEW
.
Exemple 5 - Spécifier un schéma de table
L'exemple suivant limite les résultats à un schéma de table spécifique (Dimension
) dans le WideWorldImportersDW
base de données.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW', @table_schema = 'Dimension';
Résultats :
+----------------------+---------------+------------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |----------------------+---------------+------------------+--------------+-----------| | WideWorldImportersDW | Dimension | City | TABLE | NULL | | WideWorldImportersDW | Dimension | Customer | TABLE | NULL | | WideWorldImportersDW | Dimension | Date | TABLE | NULL | | WideWorldImportersDW | Dimension | Employee | TABLE | NULL | | WideWorldImportersDW | Dimension | Payment Method | TABLE | NULL | | WideWorldImportersDW | Dimension | Stock Item | TABLE | NULL | | WideWorldImportersDW | Dimension | Supplier | TABLE | NULL | | WideWorldImportersDW | Dimension | Transaction Type | TABLE | NULL | +----------------------+---------------+------------------+--------------+-----------+
Exemple 6 – Caractères génériques
Le @fUsePattern
permet de spécifier si oui ou non le %
, _
, [
, et ]
les caractères sont interprétés comme des caractères génériques.
La valeur par défaut est 1
, ce qui signifie qu'ils sont interprétés comme des caractères génériques. Vous pouvez spécifier 0
pour préciser qu'ils ne doivent pas être interprétés comme des caractères génériques.
Voici un exemple d'utilisation d'un caractère générique :
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW', @table_name = 'C%', @table_type = 'TABLE', @fUsePattern = 1;
Résultats :
+----------------------+---------------+------------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |----------------------+---------------+------------------+--------------+-----------| | WideWorldImportersDW | Dimension | City | TABLE | NULL | | WideWorldImportersDW | Dimension | Customer | TABLE | NULL | | WideWorldImportersDW | Integration | City_Staging | TABLE | NULL | | WideWorldImportersDW | Integration | Customer_Staging | TABLE | NULL | +----------------------+---------------+------------------+--------------+-----------+
Et voici ce qui se passe si je ne spécifie aucun caractère générique :
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW', @table_name = 'C%', @table_type = 'TABLE', @fUsePattern = 0;
Résultats :
(0 rows affected) Time: 0.324s