Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Équivalent SQL Server SHOW TABLES

De temps en temps, je me retrouve à taper SHOW TABLES dans SQL Server, en s'attendant à obtenir une liste de tables.

Cela serait parfaitement logique si j'utilisais MySQL ou MariaDB. Mais SQL Server/T-SQL n'a pas de SHOW TABLES déclaration comme MySQL ou MariaDB, donc ça ne marche jamais. Et je continue d'oublier. Mais heureusement, SQL Server a des alternatives.

Voici cinq options pour obtenir une liste de tables dans SQL Server. Ceux-ci peuvent être utilisés chaque fois que vous essayez de trouver cet insaisissable SHOW TABLES déclaration dans SQL Server.

Option 1 – sys.tables

Les sys.tables la vue du catalogue système est conçue spécifiquement pour renvoyer les informations de la table utilisateur :

SELECT name
FROM sys.tables;

Cela renvoie le nom de toutes les tables utilisateur dans la base de données actuelle. Vous pouvez passer à la bonne base de données en ajoutant à l'instruction USE <database name><database name> est le nom de la base de données pour laquelle les tables que vous souhaitez répertorier.

Par exemple, l'instruction suivante renvoie toutes les tables utilisateur de KrankyKranes base de données :

USE KrankyKranes;
SELECT name
FROM sys.tables;

Vous pouvez également renvoyer le schéma si vous le souhaitez :

SELECT 
    SCHEMA_NAME(schema_id) AS schema_name,
    name AS table_name
FROM sys.tables;

Ici, j'ai utilisé le SCHEMA_NAME() fonction pour traduire la valeur du schema_id colonne dans le nom réel du schéma.

Option 2 – sys.objects

Vous pouvez également utiliser le sys.objects vue du catalogue système. Si vous choisissez cette option, vous pouvez la filtrer par type afin que seules les tables utilisateur soient renvoyées :

SELECT name 
FROM sys.objects 
WHERE type = 'U';

Cela renvoie les tables utilisateur de la base de données actuelle. Cette vue contient également un schema_id colonne, afin que vous puissiez utiliser le SCHEMA_NAME() fonction pour traduire cela dans le nom du schéma si nécessaire.

Option 3 – information_schema.tables

Le INFORMATION_SCHEMA.TABLES view renvoie une ligne pour chaque table ou vue de la base de données actuelle pour laquelle l'utilisateur actuel dispose d'autorisations.

Nous pouvons filtrer cette vue par type afin que seules les tables de base soient renvoyées :

SELECT 
    TABLE_SCHEMA,
    TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'Base Table';

Le TABLE_SCHEMA colonne contient le nom du schéma de la table, nous n'avons donc pas besoin d'utiliser le SCHEMA_NAME() fonction pour convertir l'ID de schéma en son nom.

Option 4 – sp_tables

Les sp_tables La procédure stockée renvoie une liste d'objets pouvant être interrogés dans l'environnement actuel. Cela signifie n'importe quelle table ou vue, à l'exception des objets synonymes.

La manière la plus rapide et la plus simple d'appeler cette procédure est la suivante :

sp_tables;

Mais cela peut renvoyer une longue liste d'objets.

Il vaut généralement mieux être plus précis. Par exemple :

EXEC sp_tables
    @table_owner = 'dbo', 
    @table_qualifier = 'KrankyKranes', 
    @table_type = "'TABLE'";

Ici, je dis la procédure pour afficher les tables utilisateur dans le KrankyKranes base de données appartenant à dbo .

Le @table_type L'argument accepte une liste de valeurs séparées par des virgules. Donc, si nous voulions inclure des vues, nous pourrions procéder comme suit :

EXEC sp_tables
    @table_owner = 'dbo', 
    @table_qualifier = 'Music', 
    @table_type = "'TABLE', 'VIEW'";

Option 5 – dbo.sysobjects

Avant SQL Server 2005, les dbo.sysobjects view était la vue permettant d'afficher des tables et d'autres objets.

Ainsi, si vous utilisez une ancienne édition de SQL Server, vous pouvez procéder comme suit :

SELECT name 
FROM dbo.sysobjects
WHERE xtype = 'U';