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.
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 ?
d'une autre manière, fonctionnera également sur MySQL et PostgreSQL
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
where TABLE_TYPE = 'BASE TABLE'
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.
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
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'