データベース内の全ビュー(view) を取得する
データベース内の全ビュー(view) を取得するには?
データベース内の全ビュー(view) の一覧を取得したり、ビューの名前の一部を指定して検索したりしたいような時があるかもしれません。
何通りか方法があるので、今回は、そんな時にに使えるスクリプトをご紹介します。
データベース内の全ビュー(view)を取得する
まず、sys.views というシステムカタログビューから現在のデータベース内のユーザー定義ビューの一覧を取得することができます。
SELECT OBJECT_SCHEMA_NAME(object_id) AS SchemaName, name AS ViewName FROM sys.views ORDER BY OBJECT_SCHEMA_NAME(object_id), name;
先ほどの sys.views は、sys.sysobjects というシステムカタログビューの type = 'V' の結果に、View 用のカラムを何個か足したものなので、以下のようにしてもビューの一覧を取得することができます。
SELECT OBJECT_SCHEMA_NAME(object_id) AS SchemaName, name AS ViewName FROM sys.objects WHERE type = 'V' ORDER BY OBJECT_SCHEMA_NAME(object_id), name;
他には、INFORMATION_SCHEMA.VIEWS というシステムインフォメーションスキーマービューでも、ユーザー定義のビューの一覧を取得できます。
SELECT * FROM INFORMATION_SCHEMA.VIEWS ORDER BY TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME;
また、INFORMATION_SCHEMA.TABLES というシステムインフォメーションスキーマービューの TABLE_TYPE = 'VIEW' でも取得できます。
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE ='VIEW' ORDER BY TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME;
おまけに、現在のデータベースのユーザー定義ビュー + システムビューを取得したい場合は、sys.all_views を使って取得可能です。
SELECT OBJECT_SCHEMA_NAME(object_id) AS ObjectName, name AS ViewName FROM sys.all_views ORDER BY OBJECT_SCHEMA_NAME(object_id), name;
いろいろありますが、View のスキーマと名前だけが必要な時はどれを使っても良いと思います。 残りのカラムが違いますので、必要に応じて確認してください。
どの方法でも、現在のユーザーにパーミッションがある view しか取得できませんので、十分権限のあるユーザーでログインして実行してくださいね!