カタログ関数の使用

どのようなデータベースであっても、その構造は、データベースに格納されたデータを保持するような構造になっています。この構造の定義は、権限などその他の情報と共にカタログに保存されます。カタログは、システム テーブルのセットとして実装され、データ辞書と呼ばれることもあります。

SQL Server Native Client ODBC ドライバを使用すると、アプリケーションで ODBC カタログ関数を呼び出すことにより、データベースの構造を判別できます。カタログ関数は情報を結果セットとして返す関数で、カタログのシステム テーブルをクエリするカタログ ストアド プロシージャを使用して実装されます。たとえば、アプリケーションが、システム上のすべてのテーブルに関する情報を含む結果セット、または特定のテーブルが持つすべての列に関する情報を含む結果セットを要求するとします。この場合、標準の ODBC カタログ関数を使用して、アプリケーションが接続している SQL Server からカタログ情報を取得します。

SQL Server は分散クエリをサポートします。分散クエリは、1 つのクエリで複数の異種 OLE DB データ ソースのデータにアクセスするクエリです。リモートの OLE DB データ ソースへアクセスするための方法として、目的のデータ ソースをリンク サーバーとして定義する方法があります。これは、sp_addlinkedserver を使用して行います。リンク サーバーを定義すると、このサーバーのオブジェクトを次のような 4 部構成の名前を使用して Transact-SQL ステートメントで参照できるようになります。

linked_server_name.catalog.schema.object_name

SQL Server Native Client ODBC ドライバでは、リンク サーバーからのカタログ情報の取得に役立つ、次の 2 つのドライバ固有の関数をサポートします。

  • SQLLinkedServers

    ローカル サーバーに定義されているリンク サーバーの一覧を返します。

  • SQLLinkedCatalogs

    リンク サーバーに含まれるカタログの一覧を返します。

リンク サーバー名とカタログ名を把握している場合、次の ODBC カタログ関数の CatalogName に、これらの名前を 2 部構成の名前 (linked_server_name**.**catalog) で指定することで、目的のカタログからカタログ情報を取得できます。

  • SQLColumnPrivileges

  • SQLColumns

  • SQLPrimaryKeys

  • SQLStatistics

  • SQLTablePrivileges

  • SQLTables

2 部構成の名前 linked_server_name**.**catalog は、SQLForeignKeysFKCatalogNamePKCatalogName にも使用できます。

SQLLinkedServersSQLLinkedCatalogs を使用する場合は、次のファイルが必要です。

  • sqlncli.h

    リンク サーバーのカタログ関数の関数プロトタイプと定数定義を含むファイルです。sqlncli.h を ODBC アプリケーションにインクルードし、アプリケーションのコンパイル時にはこのファイルをインクルード パスに配置しておく必要があります。

  • sqlncli10.lib

    リンカのライブラリ パスに存在し、リンクされるファイルとして指定する必要があります。sqlncli10.lib は、SQL Server Native Client ODBC ドライバに付属しています。

  • sqlncli10.dll

    実行時に存在する必要があります。sqlncli10.dll は、SQL Server Native Client ODBC ドライバに付属しています。