web-dev-qa-db-fra.com

Sélectionner des colonnes d'une vue

J'essaie de sélectionner les noms de colonne d'une view de la même manière que si vous sélectionniez dans information_schema.columns

Je n'arrive pas à trouver un moyen de faire ça. Est-ce que quelqu'un d'autre a déjà fait cela ou sait si c'est même possible?

28
steventnorris

information_schema.columns.Table_name (au moins sous SQL Server 2000) inclut des vues, il suffit donc d'utiliser 

SELECT * FROM information_schema.columns WHERE table_name = 'VIEW_NAME'
55
Ghost

Essaye ça:

SELECT *
FROM sys.views

Cela vous donne les vues en tant que telles - si vous avez besoin des colonnes, utilisez ceci:

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

Je ne sais pas comment vous pouvez le faire avec le INFORMATION_SCHEMA - je ne l'utilise jamais, car cela semble plutôt "maladroit" et peu intuitif, comparé aux vues du catalogue de schémas sys.

Reportez-vous à la documentation MSDN sur les vues de catalogue pour obtenir tous les détails sur toutes les vues disponibles et sur les informations qu’elles peuvent contenir.

13
marc_s

Les vues INFORMATION_SCHEMA contiennent des métadonnées sur les objets de la base de données. INFORMATION_SCHEMA.COLUMNS utilise les tables système sous-jacentes pour récupérer les métadonnées (vérifiez sp_helptext 'master.Information_schema.columns'). Vous pouvez utiliser cette requête plus simple pour sélectionner les noms de colonne utilisés dans n’importe quelle vue.

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>'
1
prabhat
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
1
Howard Rothenburg