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

SQL Server MOSTRAR TABLAS Equivalente

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