2012-06-29 24 views
23

Estoy intentando seleccionar los nombres de columna de view de forma similar a seleccionar desde information_schema.columns.Seleccionar columnas de una vista

Parece que no puedo encontrar la forma de hacerlo. ¿Alguien más ha hecho esto antes o sabe si es posible?

Respuesta

44

information_schema.columns.Table_name (al menos bajo SQL Server 2000) incluye puntos de vista, por lo que sólo utilice

SELECT * FROM information_schema.columns WHERE table_name = 'VIEW_NAME' 
+4

no devuelve nada en SSMS 2012 – Imad

+0

Me funciona. ¡Gracias! –

10

Prueba esto:

SELECT * 
FROM sys.views 

Esto le da los puntos de vista como tal - si usted necesita las columnas, utilice la siguiente:

SELECT * 
FROM sys.columns 
WHERE object_id = OBJECT_ID('dbo.YourViewNameHere') 

No estoy seguro de cómo se puede hacer usando el INFORMATION_SCHEMA - I nunca lo use, ya que se siente bastante "torpe" y poco intuitivo, en comparación con las vistas del catálogo de esquemas sys.

Consulte el MSDN docs on the Catalog Views para obtener todos los detalles de todas las vistas disponibles y qué información pueden contener.

+0

Esto me da el nombre de todas las vistas, pero no los nombres de las columnas en la vista. – steventnorris

0
SELECT distinct VIEW_NAME 
    ,TABLE_SCHEMA 
    ,TABLE_NAME 
    ,COLUMN_NAME 
FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 
--WHERE TABLE_SCHEMA = 'Person' 
ORDER BY 
    VIEW_NAME 
    ,TABLE_SCHEMA 
    ,TABLE_NAME 
    ,COLUMN_NAME 
+0

Esta es una consulta muy interesante, pero en realidad devuelve las columnas de la tabla utilizadas para obtener los resultados en la consulta, no las columnas devueltas. Por lo tanto, es incorrecta para la respuesta, pero muy útil, no obstante. – AnthonyVO

1

vistas INFORMATION_SCHEMA sostiene metadatos sobre los objetos dentro de la base de datos. INFORMATION_SCHEMA.COLUMNS utiliza tablas sys subyacentes para recuperar los metadatos (ver sp_helptext 'master.Information_schema.columns'). Puede usar esta consulta más simple para seleccionar nombres de columna usados ​​en cualquier vista.

SELECT col.name 
FROM <db_name>.sys.columns col, <db_name>.sys.views vew 
WHERE col.object_id = vew.object_id 
AND vew.name = '<view_name>' 
+0

bienvenidos a apilar, cada vez que responda un problema siempre intente explicar cómo la solución ayudará al solicitante. tómese su tiempo y edite su respuesta –

+1

En lugar de varias tablas en la cláusula 'FROM', puede usar' JOIN'. Por lo tanto, la consulta será 'SELECT col.name FROM sys.columns col JOIN sys.views vew ON col.object_id = vew.object_id WHERE vew.name = '' ' – Arulkumar

Cuestiones relacionadas