web-dev-qa-db-fra.com

Comment obtenir la liste de toutes les tables d'une base de données utilisant TSQL?

Quel est le meilleur moyen d'obtenir les noms de toutes les tables d'une base de données spécifique sur SQL Server?

795
Ray Vega

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' 
1263
ScottStonehouse
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

Voici une liste d'autres types d'objet que vous pouvez également rechercher:

  • AF: fonction d'agrégation (CLR)
  • C: contrainte de vérification
  • D: contrainte par défaut ou DEFAULT
  • F: contrainte de clé étrangère
  • L: Journal
  • FN: fonction scalaire
  • FS: fonction scalaire d'assemblage (CLR)
  • FT: Fonction de table table Assembly (CLR)
  • SI: fonction de table alignée
  • IT: table interne
  • P: procédure stockée
  • PC: procédure mémorisée d'assemblage (CLR)
  • PK: contrainte de clé primaire (le type est K)
  • RF: procédure stockée de filtre de réplication
  • S: table système
  • SN: synonyme
  • SQ: File d'attente de service
  • Déclencheur DML TA: Assembly (CLR)
  • TF: fonction de table
  • TR: Déclencheur SQL DML
  • TT: type de table
  • U: table utilisateur
  • UQ: contrainte UNIQUE (le type est K)
  • V: Voir
  • X: procédure stockée étendue
185
Micah
SELECT * FROM INFORMATION_SCHEMA.TABLES 

ou

SELECT * FROM Sys.Tables
74
StingyJack
select * from sys.tables;

OU 

SELECT * FROM INFORMATION_SCHEMA.TABLES 

OR

SELECT * FROM sysobjects WHERE xtype='U'
29
sunilkuamr
USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

OR

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO
20
Vikash Singh
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012

10
Rasoul Zabihi
exec sp_msforeachtable 'print ''?'''
9
Ray Vega
SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(Standard SQL Server 2000; toujours pris en charge dans SQL Server 2005.)

8
devio

select * from sysobjects where xtype='U'

6
spoulson
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 
5
Erikk Ross

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
4
Astrotrain

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:

  • MyDatabase.dbo.MyTable1 
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3 
  • MyDatabase.MySchema.MyTable4
  • etc.
2
Scott Software

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
2
vikashspeaks
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME
1

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 
1
Frank

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
1
DarkRob

vous pouvez simplement sélectionner d'abord votre base de données

use database_name;

puis tapez juste

show tables;
1
Erfan Ahmed

Utiliser SELECT * FROM INFORMATION_SCHEMA.COLUMNS vous montre également toutes les tables et les colonnes associées.

0
Masoud Darvishian
--for Oracle
select tablespace_name, table_name from all_tables;

Ce lien peut fournir beaucoup plus d'informations à ce sujet sujet

0
Demietra95