Quel est le meilleur moyen d'obtenir les noms de toutes les tables d'une base de données spécifique sur SQL Server?
SQL Server 2005, 2008, 2012, 2014 ou 2016:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
Pour afficher uniquement les tables d'une base de données particulière
SELECT TABLE_NAME
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
Ou,
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )
PS: pour SQL Server 2000:
SELECT * FROM sysobjects WHERE xtype='U'
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
Voici une liste d'autres types d'objet que vous pouvez également rechercher:
SELECT * FROM INFORMATION_SCHEMA.TABLES
ou
SELECT * FROM Sys.Tables
select * from sys.tables;
OU
SELECT * FROM INFORMATION_SCHEMA.TABLES
OR
SELECT * FROM sysobjects WHERE xtype='U'
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
OR
USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES
GO
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'
SQL Server 2012
exec sp_msforeachtable 'print ''?'''
SELECT name
FROM sysobjects
WHERE xtype='U'
ORDER BY name;
(Standard SQL Server 2000; toujours pris en charge dans SQL Server 2005.)
select * from sysobjects where xtype='U'
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
L'inconvénient de INFORMATION_SCHEMA.TABLES
est qu'il inclut également des tables système telles que dtproperties
et les tables MSpeer_...
, sans qu'il soit possible de les différencier de vos propres tables.
Je recommanderais d'utiliser sys.objects
(la nouvelle version de obsolète sysobjects view), qui prend en charge l'exclusion des tables système:
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
Dans SSMS, pour obtenir tous les noms de table pleinement qualifiés dans une base de données spécifique (par exemple, "MyDatabase"):
SELECT [TABLE_CATALOG] + '.' + [TABLE_SCHEMA] + '.' + [TABLE_NAME]
FROM MyDatabase.INFORMATION_SCHEMA.Tables
WHERE [TABLE_TYPE] = 'BASE TABLE' and [TABLE_NAME] <> 'sysdiagrams'
ORDER BY [TABLE_SCHEMA], [TABLE_NAME]
Résultats:
S'il vous plaît utiliser ceci. Vous obtiendrez des noms de table avec des noms de schéma:
SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
ORDER BY TABLE_NAME
Grâce à Ray Vega, dont la réponse donne toutes les tables utilisateur d'une base de données ...
exec sp_msforeachtable 'print' '?' ''
sp_helptext affiche la requête sous-jacente, qui résume pour ...
select * from dbo.sysobjects o
join sys.all_objects syso on o.id = syso.object_id
where OBJECTPROPERTY(o.id, 'IsUserTable') = 1
and o.category & 2 = 0
Bien vous pouvez utiliser sys.objects pour obtenir tous les objets de base de données.
GO
select * from sys.objects where type_desc='USER_TABLE' order by name
GO
OR
-- For all tables
select * from INFORMATION_SCHEMA.TABLES
GO
--- For user defined tables
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'
GO
--- For Views
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='VIEW'
GO
vous pouvez simplement sélectionner d'abord votre base de données
use database_name;
puis tapez juste
show tables;
Utiliser SELECT * FROM INFORMATION_SCHEMA.COLUMNS
vous montre également toutes les tables et les colonnes associées.
--for Oracle
select tablespace_name, table_name from all_tables;
Ce lien peut fournir beaucoup plus d'informations à ce sujet sujet