2012-06-29 16 views
23

Sto tentando di selezionare i nomi di colonna di uno view in modo simile a quello selezionato da information_schema.columns.Seleziona colonne di una vista

Non riesco a trovare un modo per farlo. Qualcun altro l'ha già fatto prima o sa se è possibile?

risposta

44

information_schema.columns.Table_name (almeno in SQL Server 2000) include una vista, quindi basta usare

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

non restituisce nulla in SSMS 2012 – Imad

+0

Funziona per me. Grazie! –

10

Prova questo:

SELECT * 
FROM sys.views 

Questo ti dà i punti di vista in quanto tali - se è necessario le colonne, utilizzare questo:

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

Non sei sicuro di come si può fare utilizzando il INFORMATION_SCHEMA - I non utilizzarlo mai, poiché sembra piuttosto "goffo" e non intuitivo, rispetto alle viste del catalogo dello schema sys.

Vedere MSDN docs on the Catalog Views per tutti i dettagli di tutte le viste disponibili e quali informazioni potrebbero contenere.

+0

Questo mi dà il nome di tutte le viste, ma non i nomi delle colonne nella 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

Questa è una query molto interessante ma in realtà restituisce le colonne della tabella utilizzate per ottenere i risultati nella query, non le colonne della vista restituite. Quindi non è corretto per la risposta, ma molto utile comunque. – AnthonyVO

1

visualizzazioni INFORMATION tiene i metadati relativi oggetti all'interno del database. INFORMATION_SCHEMA.COLUMNS utilizza le tabelle sys sottostanti per recuperare i metadati (controlla sp_helptext 'master.Information_schema.columns'). È possibile utilizzare questa query più semplice per selezionare i nomi di colonna utilizzati in qualsiasi 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

benvenuti allo stack, ogni volta che rispondi a un problema cerca sempre di spiegare come la soluzione aiuterà il richiedente. per favore prenditi un po 'di tempo e modifica la tua risposta –

+1

Invece di più tabelle sulla clausola 'FROM', puoi usare' JOIN'. Quindi la query sarà 'SELECT col.name FROM sys.columns col JOIN sys.views vew ON col.object_id = vew.object_id WHERE vew.name = ''' – Arulkumar

Problemi correlati