Como faço para obter a lista de todas as tabelas de uma base de dados usando TSQL?
Qual é a melhor maneira de obter os nomes de todas as tabelas em um banco de dados específico no servidor SQL?
17 answers
Servidor SQL 2000, 2005, 2008, 2012, 2014, 2016, 2017 or 2019:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
Para mostrar apenas tabelas de uma determinada base de dados
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: para o SQL Server 2000:
SELECT * FROM sysobjects WHERE xtype='U'
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
Aqui está uma lista de outros tipos de objetos que você pode procurar também:
- AF: função agregada (CLR)
- C: restrição de verificação
- D: restrição por omissão ou por omissão
- F: restrição de chave estrangeira
- L: Log
- FN: função escalar
- FS: função escalar do conjunto (CLR)
- FT: função de valor de tabela da montagem (CLR)
- SE: função de tabela alinhada
- IT: quadro interno
- P: procedimento armazenado
- PC: Montagem (CLR) armazenada-procedimento
- PK: restrição de chave primária (o tipo é K)
- RF: procedimento armazenado com filtro de replicação
- s: Tabela Do Sistema
- SN: sinónimo
- SQ: Fila de Serviços
- TA: dispositivo de accionamento DML em conjunto (CLR)
- TF: Função Da Tabela
- TR: gatilho de DML SQL
- TT: tipo de Tabela
- U: tabela de utilizadores
- UQ: restrição única (o tipo é K)
- V: Ver
- X: procedimento alargado armazenado
SELECT * FROM INFORMATION_SCHEMA.TABLES
Ou
SELECT * FROM Sys.Tables
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
Ou
USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES
GO
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'
Servidor SQL 2012
exec sp_msforeachtable 'print ''?'''
SELECT name
FROM sysobjects
WHERE xtype='U'
ORDER BY name;
(SQL Server 2000 standard; ainda suportado no SQL Server 2005.)
select * from sysobjects where xtype='U'
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
A desvantagem de INFORMATION_SCHEMA.TABLES
é que também inclui tabelas de sistemas como dtproperties
e as tabelas MSpeer_...
, Sem como distingui-las das suas próprias tabelas.
sys.objects
(a nova versão dos sysobjects obsoletos, que suporta a exclusão das tabelas do sistema:
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
--for oracle
select tablespace_name, table_name from all_tables;
Este link pode fornecer muito mais informações sobre este assunto. tópico
Em SSMS, para obter todos os nomes de tabelas totalmente qualificados numa base de dados específica (por exemplo, "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.Mytabe2
- MyDatabase.MySchema.Mytabe3
- MyDatabase.MySchema.Mytabe4
- etc.
Por favor use isto. Você vai obter nomes de mesa juntamente com nomes de esquemas:
SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
Bem, pode usar sys.objectos para obter todos os objectos da base de dados.
GO
select * from sys.objects where type_desc='USER_TABLE' order by name
GO
Ou
-- 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
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
ORDER BY TABLE_NAME
Exec sp_msforeachtable 'print"?'''
O Sp_ Helptext mostra a consulta subjacente, a qual resume...
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
Se USAR {[0] } também lhe mostra todas as tabelas e colunas relacionadas.