¿Cómo obtengo una lista de todas las tablas en una base de datos usando TSQL?


Respuestas:


1429

SQL Server 2000, 2005, 2008, 2012, 2014, 2016, 2017 o 2019:

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

Para mostrar solo tablas de una base de datos particular

SELECT TABLE_NAME 
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE'

O,

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' 
    AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )

PD: para SQL Server 2000:

SELECT * FROM sysobjects WHERE xtype='U' 

46
Tenga en cuenta que esto también incluirá VISTAS, no solo tablas
— Nathan Koop el

17
Agregue el nombre de la base de datos si no está utilizando la base de datos específica para que sea SELECT TABLE_NAME FROM <DATABASE_NAME> .INFORMATION_SCHEMA.Tables
— Shriroop

22
Agregar WHERE TABLE_TYPE='BASE TABLE'solo incluirá tablas base (y, por extensión, siempre podría usar WHERE TABLE_TYPE != 'VIEW').
— Phillip Copley

3
"sysdiagrams" también aparece en esta lista :(
— celsowm

44
sysdiagrams es una tabla normal, siempre debe excluirla manualmente con a AND name <> 'sysdiagrams'.
— Christoph

199
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

Aquí hay una lista de otros tipos de objetos que puede buscar también:

  • AF: función agregada (CLR)
  • C: restricción CHECK
  • D: Restricción predeterminada o POR DEFECTO
  • F: restricción de CLAVE EXTRANJERA
  • L: registro
  • FN: función escalar
  • FS: función escalar de ensamblaje (CLR)
  • FT: función de valor de tabla de ensamblado (CLR)
  • IF: función de tabla en línea
  • IT: mesa interna
  • P: procedimiento almacenado
  • PC: procedimiento almacenado de ensamblaje (CLR)
  • PK: restricción de PRIMARY KEY (el tipo es K)
  • RF: procedimiento almacenado del filtro de replicación
  • S: tabla del sistema
  • SN: Sinónimo
  • SQ: cola de servicio
  • TA: Disparador DML de ensamblaje (CLR)
  • TF: función de tabla
  • TR: Disparador DML SQL
  • TT: tipo de tabla
  • U: tabla de usuario
  • UQ: restricción ÚNICA (el tipo es K)
  • V: Ver
  • X: procedimiento almacenado extendido

99
El alias es un poco redundante: SELECT name FROM sysobjects WHERE xtype = 'U'haría lo mismo.
— PJSCopeland

Gracias, inicialmente probé esto con múltiples sentencias select para PK,FK,D,C,V,UQetc. para comparar la base de datos de origen y destino, pero luego encontré esta característica en VS, pero ¿no hay una sql querypara comparar la base de datos completa de origen y destino?
— shaijut

Uno se pregunta por qué 'U'se usa para identificar la tabla de usuarios ... en lugar de tal vez 'UT'o, la más intuitiva, 'T'... ¡Ah, bueno, esto funciona!
— user919426

87
SELECT * FROM INFORMATION_SCHEMA.TABLES 

O

SELECT * FROM Sys.Tables

55
Solo una nota de que (como se menciona en otras respuestas) sys.tables solo está disponible en 2005 en adelante
— Rob

2
Lo que no es un problema en 2018. Creo que esto debería ser mayor :-)
— Michal B.

29
USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

O

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO

11
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012



9
SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(SQL Server 2000 estándar; todavía compatible con SQL Server 2005.)



6
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 

SELECT name FROM sysobjects WHERE xtype='U' AND name <> 'sysdiagrams'; porque la tabla sysdiagrams, aunque creada por Microsoft SQL Server Management Studio, técnicamente no es una tabla del sistema, sino una que generalmente nos gusta excluir de todos modos.
— Christoph

5

La desventaja INFORMATION_SCHEMA.TABLESes que también incluye tablas del sistema como dtpropertiesy las MSpeer_...tablas, sin forma de distinguirlas de sus propias tablas.

Recomendaría usar sys.objects(la nueva versión de la vista obsoleta de sysobjects ), que admite excluir las tablas del sistema:

select *
from sys.objects
where type = 'U'      -- User tables
and is_ms_shipped = 0 -- Exclude system tables

2

En SSMS, para obtener todos los nombres de tabla totalmente calificados en una base de datos específica (por ejemplo, "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]

Resultados:

  • MyDatabase.dbo.MyTable1
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3
  • MyDatabase.MySchema.MyTable4
  • etc.

2

Por favor use esto. Obtendrá nombres de tabla junto con nombres de esquema:

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID

1
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME

1

Gracias a Ray Vega, cuya respuesta da todas las tablas de usuario en una base de datos ...

exec sp_msforeachtable 'print' '?' ''

sp_helptext muestra la consulta subyacente, que resume a ...

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

Bueno, puede usar sys.objects para obtener todos los objetos de la base de datos.

 GO
 select * from sys.objects where type_desc='USER_TABLE' order by name
 GO

O

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

0
--for oracle
select tablespace_name, table_name from all_tables;

Este enlace puede proporcionar mucha más información sobre este tema.


2
Esto no es para SQL Server, por lo que no es una respuesta a esta pregunta.
— Dan Getz

0

El uso SELECT * FROM INFORMATION_SCHEMA.COLUMNStambién le muestra todas las tablas y columnas relacionadas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.