valor - Obter todos os nomes de tabelas de um banco de dados específico por consulta SQL?




todos os comandos sql (10)

Eu estou trabalhando em aplicativos que podem lidar com vários servidores de banco de dados como "MySQL" e "MS SQL Server".

Eu quero obter nomes de tabelas de um banco de dados específico usando uma consulta geral que deve ser adequada para todos os tipos de banco de dados. Eu tentei seguir:

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

Mas ele está dando nomes de tabela de todos os bancos de dados de um determinado servidor, mas eu quero obter nomes de tabelas do banco de dados selecionado apenas. Como posso restringir essa consulta para obter tabelas de um banco de dados específico?


A consulta a seguir selecionará todas as Tables no banco de dados chamado DBName :

USE DBName
GO 
SELECT *
FROM sys.Tables
GO

Basta colocar o DATABASE NAME na frente de INFORMATION_SCHEMA.TABLES :

select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'

Eu não vi essa resposta, mas hey isso é o que eu faço:

SELECT name FROM databaseName.sys.Tables;

No mysql, use:

SHOW TABLES;

Depois de selecionar o banco de dados com:

USE db_name

Provavelmente devido à maneira como diferentes sql dbms lidam com esquemas.

Tente o seguinte

Para o SQL Server:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName'

Para o MySQL:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' 

Para o Oracle, acho que o equivalente seria usar DBA_TABLES .


Roubado here :

USE YOURDBNAME
GO 
SELECT *
FROM sys.Tables
GO

ATUALIZAÇÃO PARA A VERSÃO MAIS RECENTE DO MSSQL SERVER (17.7)

SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'

Ou SELECT * para obter todas as colunas.


Exec sp_MSforeachtable 'Select ''?'''

USE dbName;

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName')
ORDER BY TABLE_NAME

Se você estiver trabalhando com vários esquemas em um servidor MS SQL, o SELECT-ing TABLE_NAME sem selecionar simultaneamente TABLE_SCHEMA poderá ser de benefício limitado, portanto assumi que estamos interessados ​​nas tabelas pertencentes a um esquema conhecido ao usar o MS SQL Server.

Eu testei a consulta acima com o SQL Server Management Studio usando um banco de dados do meu SQL Server e com o MySQL Workbench usando um banco de dados MySQL, e em ambos os casos ele fornece os nomes das tabelas.

A consulta inclui as duas consultas diferentes de Michael Baylon em uma que pode ser executada em qualquer tipo de banco de dados. A primeira parte da cláusula WHERE funciona em bancos de dados MySQL e a segunda parte (após o OR) funciona em bancos de dados MS SQL Server. É feio e logicamente um pouco incorreto, pois supõe que não existe um esquema indesejado com o mesmo nome do banco de dados. Isso pode ajudar alguém que esteja procurando por uma única consulta que possa ser executada no servidor de banco de dados.


select * from sys.tables
order by schema_id      --comments: order by 'schema_id' to get the 'tables' in 'object explorer order'
go




sql-server