resueltos - sql server
¿Obtener todos los nombres de tabla de una base de datos en particular por consulta SQL? (14)
A partir de la respuesta de Michael Baylon, necesitaba una lista que también incluyera información de esquema y así es como modifiqué su consulta.
SELECT TABLE_SCHEMA + ''.'' + TABLE_NAME as ''Schema.Table''
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_CATALOG = ''dbName''
ORDER BY TABLE_SCHEMA, TABLE_NAME
Estoy trabajando en una aplicación que puede manejar múltiples servidores de bases de datos como "MySQL" y "MS SQL Server".
Quiero obtener los nombres de las tablas de una base de datos en particular mediante una consulta general que sea adecuada para todos los tipos de bases de datos. He intentado lo siguiente:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=''BASE TABLE''
Pero está dando nombres de tablas de todas las bases de datos de un servidor particular, pero quiero obtener nombres de tablas de la base de datos seleccionada solamente. ¿Cómo puedo restringir esta consulta para obtener tablas de una base de datos en particular?
En mysql, usa:
SHOW TABLES;
Después de seleccionar el DB con:
USE db_name
La siguiente consulta seleccionará todas las Tables
en la base de datos llamada DBName
:
USE DBName
GO
SELECT *
FROM sys.Tables
GO
No vi esta respuesta pero hey esto es lo que hago:
SELECT name FROM databaseName.sys.Tables;
Para Mysql puedes hacer simple. MOSTRAR TABLAS;
Probablemente debido a la forma en que diferentes dbms de sql tratan con esquemas.
Intenta lo siguiente
Para SQL Server:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_CATALOG=''dbName''
Para MySQL:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_SCHEMA=''dbName''
Para Oracle, creo que el equivalente sería usar DBA_TABLES
.
Robado desde here :
USE YOURDBNAME
GO
SELECT *
FROM sys.Tables
GO
Si oráculo es:
select * from user_tables
Esto es, si solo desea que los objetos que son propiedad del user/schema
registrado, de lo contrario, puede usar all_tables
o dba_tables
que incluye tablas del sistema.
Simplemente coloque el DATABASE NAME
frente a INFORMATION_SCHEMA.TABLES
:
select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = ''BASE TABLE''
ACTUALIZACIÓN PARA LA VERSIÓN MÁS RECIENTE DEL SERVIDOR MSSQL (17.7)
SELECT name FROM sys.Tables WHERE type_desc = ''USER_TABLE''
O SELECT *
para obtener todas las columnas.
Exec sp_MSforeachtable ''Select ''''?''''''
USE DBName;
SELECT * FROM sys.Tables;
Podemos negociar sin GO
en lugar de usted puede usar punto ;
coma ;
.
USE dbName;
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA = ''dbName'' OR TABLE_SCHEMA = ''schemaName'')
ORDER BY TABLE_NAME
Si está trabajando con múltiples esquemas en un servidor MS SQL, entonces SELECCIONAR TABLE_NAME sin seleccionar simultáneamente TABLE_SCHEMA podría ser de beneficio limitado, por lo que asumí que estamos interesados en las tablas que pertenecen a un esquema conocido al usar MS SQL Server.
He probado la consulta anterior con SQL Server Management Studio usando una base de datos SQL Server mía y con MySQL Workbench usando una base de datos MySQL, y en ambos casos da los nombres de las tablas.
La consulta incluye dos consultas diferentes de Michael Baylon en una que luego puede ejecutarse en cualquier tipo de base de datos. La primera parte de la cláusula WHERE funciona en las bases de datos MySQL y la segunda parte (después del OR) funciona en las bases de datos MS SQL Server. Es feo y lógicamente un poco incorrecto, ya que supone que no hay ningún esquema no deseado con el mismo nombre que la base de datos. Esto podría ayudar a alguien que esté buscando una sola consulta que pueda ejecutarse en cualquiera de los dos servidores de bases de datos.
select * from sys.tables
order by schema_id --comments: order by ''schema_id'' to get the ''tables'' in ''object explorer order''
go