sql >> Base de Datos >  >> RDS >> Sqlserver

Devolver una lista de tablas de un servidor vinculado en SQL Server (ejemplos de T-SQL)

En SQL Server puede usar sp_tables_ex procedimiento almacenado del sistema para devolver información de tabla sobre las tablas de un servidor vinculado especificado.

La forma más sencilla de ejecutar este procedimiento almacenado es pasar el nombre del servidor vinculado. Al hacerlo, se devolverán todas las tablas de la base de datos predeterminada en el servidor vinculado especificado, incluidas las tablas y vistas del sistema. Esta podría ser una gran lista.

También tiene la opción de especificar una base de datos diferente y/o un esquema de tabla específico. También puede filtrar los resultados según el tipo de tabla (por ejemplo, tabla, vista, tabla del sistema, etc.).

Sintaxis

La sintaxis es así:

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

El @table_server argumento es el único argumento requerido. Este es el nombre del servidor vinculado del que desea la información de la tabla.

Los otros argumentos son opcionales y los cubro en los siguientes ejemplos. Para obtener más información sobre estos argumentos, consulte la documentación de Microsoft.

Ejemplo 1:devolver todas las tablas

El siguiente ejemplo devuelve todas las tablas, vistas, tablas del sistema, alias, etc. de la base de datos predeterminada en el servidor vinculado llamado Homer.

EXEC sp_tables_ex 'Homer';

Esto devuelve cientos de filas en mi sistema, por lo que no enumeraré los resultados en este ejemplo. Tenga en cuenta que la mayoría de esas filas son tablas del sistema y vistas del sistema.

Esto también podría hacerse así:

EXEC sp_tables_ex @table_server = 'Homer';

Ejemplo 2:especificar una base de datos diferente

El siguiente ejemplo especifica que WideWorldImportersDW se debe utilizar la base de datos.

EXEC sp_tables_ex 
  @table_server = 'Homer',   
  @table_catalog = 'WideWorldImportersDW';

Nuevamente, esto devuelve cientos de filas, por lo que no enumeraré los resultados.

Ejemplo 3:devolver una tabla específica

En este ejemplo, devuelvo información sobre una tabla específica.

EXEC sp_tables_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music',
  @table_name = 'Artists';

Resultados:

+-------------+---------------+--------------+--------------+-----------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------+---------------+--------------+--------------+-----------|
| Music       | dbo           | Artists      | TABLE        | NULL      |
+-------------+---------------+--------------+--------------+-----------+

Ejemplo 4:solo vistas de retorno

En este ejemplo, especifico que solo se deben devolver las vistas.

EXEC sp_tables_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music',
  @table_type = 'VIEW';

Resultados:

+-------------+---------------+--------------+--------------+-----------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------+---------------+--------------+--------------+-----------|
| Music       | dbo           | BluesAlbums  | VIEW         | NULL      |
| Music       | dbo           | JazzAlbums   | VIEW         | NULL      |
| Music       | dbo           | RockAlbums   | VIEW         | NULL      |
+-------------+---------------+--------------+--------------+-----------+

Tenga en cuenta que estos no incluyen vistas del sistema. Si quisiera devolver las vistas del sistema, habría usado @table_type = 'SYSTEM VIEW' (y el conjunto de resultados sería mucho más grande).

El @table_type argumento acepta los siguientes tipos:ALIAS , GLOBAL TEMPORARY , LOCAL TEMPORARY , SYNONYM , SYSTEM TABLE , SYSTEM VIEW , TABLE y VIEW .

Ejemplo 5:especificar un esquema de tabla

El siguiente ejemplo limita los resultados a un esquema de tabla específico (Dimension ) dentro de WideWorldImportersDW base de datos.

EXEC sp_tables_ex 
  @table_server = 'Homer',   
  @table_catalog = 'WideWorldImportersDW',   
  @table_schema = 'Dimension';

Resultados:

+----------------------+---------------+------------------+--------------+-----------+
| 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      |
+----------------------+---------------+------------------+--------------+-----------+

Ejemplo 6:caracteres comodín

El @fUsePattern argumento le permite especificar si el % , _ , [ y ] los caracteres se interpretan como caracteres comodín.

El valor predeterminado es 1 , lo que significa que son interpretados como caracteres comodín. Puede especificar 0 para especificar que deben no interpretarse como caracteres comodín.

Este es un ejemplo del uso de un carácter comodín:

EXEC sp_tables_ex 
  @table_server = 'Homer', 
  @table_catalog = 'WideWorldImportersDW',
  @table_name = 'C%',
  @table_type = 'TABLE',
  @fUsePattern = 1;

Resultados:

+----------------------+---------------+------------------+--------------+-----------+
| 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      |
+----------------------+---------------+------------------+--------------+-----------+

Y esto es lo que sucede si no especifico caracteres comodín:

EXEC sp_tables_ex 
  @table_server = 'Homer', 
  @table_catalog = 'WideWorldImportersDW',
  @table_name = 'C%',
  @table_type = 'TABLE',
  @fUsePattern = 0;

Resultados:

(0 rows affected)
Time: 0.324s