SQL Server システム カタログに対するクエリ

一連の特定のテーブルとビューを操作するようにハードコードされていない動的アプリケーションには、接続先のデータベース内のオブジェクトの構造と属性を判断するためのメカニズムが備わっている必要があります。このようなアプリケーションでは、たとえば次のような情報が必要になります。

  • データベース内のテーブルとビューの数と名前。
  • テーブル内またはビュー内の列数、および各列の名前、データ型、小数点以下桁数、有効桁数。
  • テーブルに定義されている制約。
  • テーブルに定義されているインデックスとキー。

SQL Server 2005 システム カタログにより、SQL Server データベースに関する上記の情報が提供されます。SQL Server 2005 システム カタログの中核となるのは、SQL Server のインスタンスのオブジェクトを記述するメタデータを表示する一連のビューです。メタデータとは、システム内のオブジェクトの属性を記述するデータのことです。SQL Server ベースのアプリケーションでは、次の機能を使用してシステム カタログ内の情報にアクセスできます。

  • カタログ ビュー。このアクセス方法をお勧めします。
  • 情報スキーマ ビュー。
  • OLE DB スキーマ行セット。
  • ODBC カタログ関数。
  • システム ストアド プロシージャとシステム関数。

カタログ ビュー

SQL Server 2005 では、システム カタログ メタデータに対する完全に新しいリレーショナル インターフェイスとしてカタログ ビューが導入されています。カタログ ビューにより、サーバー上のすべてのデータベースに格納されているメタデータにアクセスできます。

ms189082.note(ja-jp,SQL.90).gifメモ :
カタログ ビューを使用しても、レプリケーション、SQL Server エージェント、またはバックアップ メタデータにアクセスすることはできません。

カタログ ビューの使用によるメタデータへのアクセスが推奨されている理由は、次のとおりです。

  • すべてのメタデータがカタログ ビューとして利用できます。
  • カタログ ビューには、どのカタログ テーブルの実装にも依存しない形式でメタデータが表示されます。そのため、基になるカタログ テーブルが変更されてもカタログ ビューは影響を受けません。
  • カタログ ビューは、中核的なサーバー メタデータにアクセスするのに最も効率的な方法です。
  • カタログ ビューはカタログ メタデータに対する一般的なインターフェイスで、カスタマイズされた形式のカタログ メタデータを取得、変換、および表示するのに最も直接的な方法です。
  • カタログ ビューとビューの列名には、わかりやすい名前が付けられています。このため、クエリ対象のメタデータに対応する機能に関して、中程度の知識しか持たないユーザーも、期待どおりのクエリ結果を得ることができます。
ms189082.note(ja-jp,SQL.90).gif重要 :
今後の Microsoft SQL Server のリリースでは、列のリストの末尾に列を追加することにより、システム カタログ ビューの定義が拡張される可能性があります。返される列の数が変化し、アプリケーションが機能しなくなる可能性があるため、製品コードでは SELECT * FROM sys.catalog_view_name という構文を使用しないことをお勧めします。

カタログ ビューを使用したシステム カタログに対するクエリの例については、「SQL Server システム カタログに対するクエリに関してよく寄せられる質問」を参照してください。

情報スキーマ ビュー

情報スキーマ ビューは SQL-92 標準のカタログ ビューの定義に基づいています。情報スキーマ ビューには、どのカタログ テーブルの実装にも依存しない形式でカタログ情報が表示されるので、基になるカタログ テーブルが変更されても影響を受けません。情報スキーマ ビューを使用するアプリケーションは、SQL-92 に準拠する異種データベース システム間で移植可能です。詳細については、「情報スキーマ ビュー (Transact-SQL)」を参照してください。

ms189082.note(ja-jp,SQL.90).gifメモ :
情報スキーマ ビューには、SQL Server 2005 に固有のメタデータは含まれません。

互換性ビュー

以前のバージョンの SQL Server の多くのシステム テーブルは、SQL Server 2005 では、一連のビューとして実装されるようになりました。これらのビューは互換性ビューと呼ばれ、旧バージョンとの互換性のためだけに用意されています。互換性ビューには、SQL Server 2000 で使用できるのと同じメタデータが表示されます。ただし、SQL Server 2005 に導入された機能に関連するメタデータは表示されません。したがって、Service Broker やパーティションなどの新機能を使用するときは、カタログ ビューを使用するように切り替える必要があります。これは、システム テーブルをカタログ ビューにアップグレードするための妥当な理由です。カタログ ビューにアップグレードする他の理由として、ユーザー ID や型 ID を格納する互換性ビューの列から、NULL またはトリガ算術オーバーフローが返されることが挙げられます。これは、SQL Server 2005 では、32,768 以上のユーザーおよびデータ型を作成できるためです。たとえば、32,768 人のユーザーを作成してから SELECT * FROM sys.sysusers というクエリを実行すると、ARITHABORT が ON に設定されている場合は、クエリが算術オーバーフロー エラーで失敗します。ARITHABORT が OFF に設定されている場合は、uid 列から NULL が返されます。

これらの問題を回避するには、数が増加したユーザー ID や型 ID を処理できる新しいカタログ ビューを使用するようにアップグレードすることをお勧めします。

OLE DB スキーマ行セット

OLE DB 仕様には、カタログ情報を含む一連のスキーマ行セットを公開する IDBSchemaRowset インターフェイスが定義されています。OLE DB スキーマ行セットは、さまざまな OLE DB プロバイダによってサポートされているカタログ情報を表示する標準的な方法です。行セットは基になるカタログ テーブルの構造とは無関係です。詳細については、「スキーマ行セットのサポート (OLE DB)」を参照してください。

SQL Native Client OLE DB プロバイダでは、分散クエリで使用されるリンク サーバーのカタログ情報を報告する IDBSchemaRowset の拡張機能がサポートされています。詳細については、「LINKEDSERVERS 行セット (OLE DB)」を参照してください。

ODBC カタログ関数

ODBC 仕様には、カタログ情報を含む結果セットを返す一連のカタログ関数が定義されています。これらの関数は、さまざまな ODBC ドライバでサポートされているカタログ情報を表示する標準的な方法です。結果セットは基になるカタログ テーブルの構造とは無関係です。

SQL Native Client ODBC ドライバでは、分散クエリで使用されるリンク サーバーのカタログ情報を報告する 2 つのドライバ固有の関数がサポートされています。詳細については、「カタログ関数の使用」を参照してください。

システム ストアド プロシージャとシステム関数

Transact-SQL には、カタログ情報を返すサーバー システム ストアド プロシージャとシステム関数が定義されています。これらのストアド プロシージャと関数は SQL Server 固有のものですが、基になるシステム カタログ テーブルの構造がユーザーに影響することはありません。詳細については、「メタデータ関数 (Transact-SQL)」および「システム ストアド プロシージャ (Transact-SQL)」を参照してください。

参照

処理手順

メタデータ表示のトラブルシューティング

概念

SQL Server システム カタログに対するクエリに関してよく寄せられる質問

その他の技術情報

システム ビュー (Transact-SQL)
システム テーブル (Transact-SQL)
カタログ ビュー (Transact-SQL)
互換性ビュー (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手