2009-10-07 18 views
9

¿Cómo puedo seleccionar todas las columnas de todas las tablas de la base de datos, como:Seleccionar todas las columnas de todas las tablas de SQL Server 2008

Select * From * 

en SQL Server 2008 ???

La lista de la tabla es muy grande, y tiene tantas columnas, ¿es posible hacerlo sin escribir los nombres de las columnas?

O tal vez haga una selección que devuelva el nombre de las tablas.

+7

¿Por qué quieres hacer esto? –

+1

Eso realmente no tiene sentido. ¿Qué esperas exactamente de esta consulta? –

+0

Si quería inyectar SQL, esa es una de las cosas más simples que podría inyectar para recuperar los metadatos de los metadatos. Para hacerlo realmente se requiere una declaración usando vistas del sistema, etc., pero ya ves lo que quiero decir. – Andrew

Respuesta

28

Esta SQL hará esto ...

DECLARE @SQL AS VarChar(MAX) 
SET @SQL = '' 

SELECT @SQL = @SQL + 'SELECT * FROM ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']' + CHAR(13) 
FROM INFORMATION_SCHEMA.TABLES 

EXEC (@SQL) 
+1

¿cómo imprimirías '' table_name' para cada resultado? – Kuncevic

+0

@Kuncevic, si desea incluir el nombre de la tabla en cada conjunto de resultados, simplemente agréguelo a @@ SQL (reemplace los signos dobles "a" con uno solo): SELECCIONE @@ SQL = @@ SQL + 'SELECCIONAR' '' + TABLE_NAME + '' 'AS TableName, * FROM' + TABLE_SCHEMA + '. [' + TABLE_NAME + ']' + CHAR (13) FROM INFORMATION_SCHEMA.TABLES – David

+0

ahh Estaba haciendo exactamente lo mismo pero usando 1 comilla simple ''+ TABLE_NAME +'' - no funcionó. en lugar de usar 3 ''' '+ TABLE_NAME +' ''' - eso funciona. – Kuncevic

3

Es posible recuperar el nombre de todas las columnas de sys.columns
Es posible recuperar el nombre de toda la tabla de sys.tables

Pero es imposible recuperar todos los datos de todas las tablas. Tan pronto como más de una tabla esté involucrada en una consulta, es necesario un JOIN. A menos que se proporcionen condiciones de unión, las tablas se unirán como producto cartesiano completo, lo que significa que cada fila de cada tabla se emparejará con cada fila de otras 11 tablas. Tal consulta como usted solicite produciría para 10 tablas con 10 registros cada uno, no menos de 10e10 registros, es decir. 100 mil millones de registros. Estoy seguro de que no quieres esto.

Tal vez si se le explica lo que lo a lograr, no cómo, nos puede ayudar mejor.

Para seleccionar * desde cada mesa, una tras otra, puede utilizar los indocumentados, pero bien conocido sp_msforeachtable:

sp_msforeachtable 'select * from ?' 
2

Si va a enviar a Excel, sugeriría utiliza el asistente de exportación y simplemente seleccione todas las tablas allí. En el navegador de objetos, coloque el cursor sobre el nombre de la base de datos y haga clic con el botón derecho. Elija Tareas - Exportar datos y siga el asistente. Por qué alguien querría una base de datos completa en Excel me supera, pero esa es la mejor manera. Si necesita hacerlo más de una vez, puede guardar la exportación en un paquete SSIS.

7
SELECT t.name AS table_name, 
SCHEMA_NAME(schema_id) AS schema_name, 
c.name AS column_name 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID where t.name = 'ProductItem' AND C.name like '%retail%' 
ORDER BY schema_name, table_name 
5

Prueba de esto, funciona bien

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 

Entonces se puede

WHERE TABLE_NAME LIKE '' AND COLUMN_NAME LIKE '' 
Cuestiones relacionadas