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

Devolver una lista de tablas y vistas en SQL Server usando T-SQL (sp_tables)

En SQL Server, puede usar sp_tables procedimiento almacenado del sistema para obtener una lista de tablas y vistas en el entorno actual.

Puede devolver todas las tablas y vistas, o puede limitarlo a un propietario, tipo, patrón o incluso una tabla o vista específica.

Sintaxis

La sintaxis es así:

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

Todos los argumentos son opcionales.

Ejemplo 1:sin argumentos

Puede ejecutar este procedimiento almacenado sin ningún argumento. Hacer esto devolverá todas las tablas y vistas en el entorno actual.

Así:

EXEC sp_tables;

Esto devuelve más de 500 filas en mi sistema, por lo que no proporcionaré los resultados aquí. Además de devolver tablas y vistas definidas por el usuario, también devuelve objetos del sistema, como sys y INFORMATION_SCHEMA tablas y vistas.

Ejemplo 2:todos los argumentos

En el otro extremo, aquí hay un ejemplo que incluye todos los argumentos. Esto reduce los resultados a un nombre de tabla específico, un tipo específico, un calificador específico y un propietario específico.

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

Resultado:

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

Ejemplo 3:devolver una tabla específica

Una forma más fácil de devolver una tabla específica es simplemente usar el primer argumento.

Así:

EXEC sp_tables @table_name = 'Customers';

O incluso más concisamente, como uno de estos:

EXEC sp_tables 'Customers';
sp_tables 'Customers';

Aunque, tenga en cuenta que podría obtener más de una fila. En este ejemplo, se devuelven dos filas:

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

La primera fila es para una tabla y la segunda fila es para una vista.

Si no estuviera interesado en ver vistas o tablas del sistema, podría agregar un argumento más para especificar el tipo de tabla.

Ejemplo 4:devolver un tipo de tabla específico

Aquí, perfecciono el ejemplo anterior especificando solo el tipo de tabla que me interesa, junto con el nombre de la tabla.

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

Resultado:

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

Los tipos aceptables incluyen VIEW , TABLE y SYSTEMTABLE .

Tenga en cuenta que los tipos de tablas deben estar en mayúsculas.

Ejemplo 5:devolver varios tipos de tablas

Es posible que haya notado que la sintaxis del tipo de tabla usa comillas simples y doble comillas. Esto se debe a que acepta una lista separada por comas de tipos de tablas. La lista completa está encerrada entre comillas dobles, y cada elemento de la lista está encerrado entre comillas simples, con una coma separando cada elemento.

Aquí hay un ejemplo de tipos de tablas que devuelven TABLE y VIEW .

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

Tenga en cuenta que si SET QUOTED_IDENTIFIER está ON , cada comilla simple debe duplicarse y todo el parámetro debe estar entre comillas simples.

Ejemplo 6:una nota sobre el argumento del calificador de tabla

Si usa el @table_qualifier argumento, su valor debe ser el mismo que el del entorno actual, de lo contrario obtendrá un error. En SQL Server, el calificador de tabla representa el nombre de la base de datos. En algunos productos, representa el nombre del servidor del entorno de la base de datos de la tabla.

Esto es lo que sucede en SQL Server si uso un valor que es diferente a la base de datos actual:

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

Resultado:

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.

Ejemplo 7:comodines

Puede usar @fUsePattern argumento para especificar si el guión bajo ( _ ), porcentaje ( % ), y corchete ( [ o ] ) los caracteres se interpretan como caracteres comodín. Los valores válidos son 0 (la coincidencia de patrones está desactivada) y 1 (la coincidencia de patrones está activada). El valor predeterminado es 1 .

Este es un ejemplo del uso de la coincidencia de patrones para devolver nombres de tablas que comienzan con la letra "A":

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

Resultado:

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

Pero esto es lo que sucede si desactivo la coincidencia de patrones:

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

Resultado:

(0 rows affected)