De vez en cuando me encuentro escribiendo SHOW TABLES
en SQL Server, esperando obtener una lista de tablas.
Eso tendría mucho sentido si estuviera usando MySQL o MariaDB. Pero SQL Server/T-SQL no tiene SHOW TABLES
declaración como MySQL o MariaDB, por lo que nunca funciona. Y sigo olvidando. Pero afortunadamente, SQL Server tiene alternativas.
Aquí hay cinco opciones para obtener una lista de tablas en SQL Server. Estos se pueden usar siempre que esté tratando de encontrar ese escurridizo SHOW TABLES
declaración en SQL Server.
Opción 1:sys.tables
Las sys.tables
La vista del catálogo del sistema está diseñada específicamente para devolver información de la tabla del usuario:
SELECT name
FROM sys.tables;
Esto devuelve el nombre de todas las tablas de usuario en la base de datos actual. Puede cambiar a la base de datos correcta anteponiendo la declaración con USE <database name>
donde <database name>
es el nombre de la base de datos cuyas tablas desea listar.
Por ejemplo, la siguiente declaración devuelve todas las tablas de usuario de KrankyKranes
base de datos:
USE KrankyKranes;
SELECT name
FROM sys.tables;
También puede devolver el esquema si lo desea:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
Aquí, usé el SCHEMA_NAME()
función para traducir el valor del schema_id
columna en el nombre real del esquema.
Opción 2:sys.objects
También puede usar sys.objects
vista del catálogo del sistema. Si elige esta opción, puede filtrarla por tipo para que solo se devuelvan las tablas de usuario:
SELECT name
FROM sys.objects
WHERE type = 'U';
Esto devuelve las tablas de usuario de la base de datos actual. Esta vista también contiene un schema_id
columna, por lo que puede utilizar el SCHEMA_NAME()
función para traducir eso en el nombre del esquema si es necesario.
Opción 3:information_schema.tables
El INFORMATION_SCHEMA.TABLES
view devuelve una fila para cada tabla o vista en la base de datos actual para la que el usuario actual tiene permisos.
Podemos filtrar esta vista por tipo para que solo se devuelvan las tablas base:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
El TABLE_SCHEMA
columna contiene el nombre del esquema de la tabla, por lo que no necesitamos usar SCHEMA_NAME()
función para convertir el ID de esquema a su nombre.
Opción 4:sp_tables
Las sp_tables
El procedimiento almacenado devuelve una lista de objetos que se pueden consultar en el entorno actual. Esto significa cualquier tabla o vista, excepto los objetos sinónimos.
La forma más rápida y sencilla de llamar a este procedimiento es así:
sp_tables;
Pero eso puede devolver una larga lista de objetos.
Por lo general, es mejor ser más específico. Por ejemplo:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
Aquí, estoy diciendo el procedimiento para mostrar tablas de usuarios en KrankyKranes
base de datos que son propiedad de dbo
.
El @table_type
argumento acepta una lista de valores separados por comas. Entonces, si quisiéramos incluir vistas, podríamos hacer lo siguiente:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
Opción 5:dbo.sysobjects
Antes de SQL Server 2005, dbo.sysobjects
view era la vista para mostrar tablas y otros objetos.
Entonces, si está utilizando una edición anterior de SQL Server, puede hacer esto:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';