web-dev-qa-db-fra.com

Requête pour obtenir les noms de toutes les tables de la base de données SQL Server 2008

Est-il possible d'écrire une requête qui me donnera les noms de toutes les tables d'une base de données SQL Server? Je travaille sur une documentation "après le fait" sur un système que je n'ai pas créé et je cherche un raccourci pour obtenir une liste des tables d'une base de données.

26
John H.

Dans une seule base de données - oui:

USE your_database
SELECT name FROM sys.tables

Obtenir toutes les tables de toutes les bases de données - uniquement avec un hack .... voyez cette question SO pour connaître plusieurs approches:) Comment répertorier toutes les tables de toutes les bases de données de SQL Server dans un seul jeu de résultats ?

46
marc_s

d'une autre manière, fonctionnera également sur MySQL et PostgreSQL

select TABLE_NAME from INFORMATION_SCHEMA.TABLES
where TABLE_TYPE = 'BASE TABLE'
8
SQLMenace

Essaye ça:

SELECT s.NAME + '.' + t.NAME AS TableName
FROM sys.tables t
INNER JOIN sys.schemas s
    ON t.schema_id = s.schema_id

il affichera le schéma + le nom de la table pour toutes les tables de la base de données actuelle.

Voici une version qui listera chaque table de chaque base de données sur le serveur actuel. il permet d'utiliser un paramètre de recherche sur une ou plusieurs parties du serveur + bases de données + schémas + noms de tables:

SET NOCOUNT ON
DECLARE @AllTables table (CompleteTableName nvarchar(4000))
DECLARE @Search nvarchar(4000)
       ,@SQL   nvarchar(4000)
SET @Search=null --all rows
SET @SQL='select @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id WHERE @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name LIKE ''%'+ISNULL(@SEARCH,'')+'%'''

INSERT INTO @AllTables (CompleteTableName)
    EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY 1

définissez @Search sur NULL pour toutes les tables, définissez-le sur des éléments tels que "dbo.users" ou "utilisateurs" ou ".master.dbo", ou même inclure des caractères génériques tels que ".master.%. u", etc.

4
KM.

Pour obtenir également les informations sur les champs, vous pouvez utiliser les éléments suivants:

SELECT TABLE_SCHEMA, TABLE_NAME, 
       COLUMN_NAME, substring(DATA_TYPE, 1,1) AS DATA_TYPE
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA NOT IN("information_schema", "mysql", "performance_schema") 
ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION
1
Arjen Rodenhuis

Veuillez utiliser la requête suivante pour répertorier les tables de votre base de données.

select name from sys.Tables 

De plus, vous pouvez ajouter une condition where pour ignorer les tables générées par le système et répertorier uniquement les tables créées par l'utilisateur en ajoutant type ='U'

Ex: select name from sys.Tables where type ='U'

0
Iam ck
sys.tables

Contient toutes les tables . Alors exécutez cette requête pour obtenir toutes les tables avec des détails.

SELECT * FROM sys.tables

 enter image description here

ou sélectionnez simplement Nom dans sys.tables pour obtenir le nom de toutes les tables.

SELECT Name From sys.tables
0
UniCoder