SQL Anywhere OLE DB プロバイダを使用して SQL Anywhere データベースへのアクセスを取得する Microsoft リンクサーバを作成することができます。SQL クエリの発行には、Microsoft の 4 部分構成のテーブル参照構文か Microsoft の OPENQUERY SQL 関数を使用できます。4 部分構成構文の例を次に示します。
SELECT * FROM SADATABASE.demo.GROUPO.Customers |
この例では、SADATABASE はリンクサーバの名前であり、demo はカタログまたはデータベース名であり、GROUPO は SQL Anywhere データベースのテーブル所有者であり、また、Customers は SQL Anywhere データベースのテーブル名です。
もう 1 つの例では、Microsoft の OPENQUERY 関数を使用しています。
SELECT * FROM OPENQUERY( SADATABASE, 'SELECT * FROM Customers' ) |
OPENQUERY 構文では、2 番目の SELECT 文 ('SELECT * FROM Customers') が SQL Anywhere サーバに渡され、実行されます。
複雑なクエリの場合、クエリ全体が SQL Anywhere サーバで評価されるため、OPENQUERY を使用する方が適しています。4 部分構成の構文では、SQL Server は、クエリによって参照されるすべてのテーブルの内容を取得してから評価できるようになります (たとえば、WHERE、JOIN、ネストされたクエリによるクエリなど)。非常に大きいテーブルを必要とするクエリの場合、4 部分構成の構文を使用すると処理時間が非常に長くなる可能性があります。次の 4 部分構成のクエリの例では、SQL Server は OLE DB プロバイダ経由で、テーブル全体での単純な SELECT (WHERE 句なし) を SQL Anywhere データベースサーバに渡します。
SELECT ID, Surname, GivenName FROM [SADATABASE].[demo].[GROUPO].[Customers] WHERE Surname = 'Elkins' |
結果セットの 1 つのローを SQL Server に返す代わりに、すべてのローが返され、この結果セットは SQL Server によって 1 つのローに減らされます。次の例では同じ結果が生成されますが、1 つのローのみが SQL Server に返されます。
SELECT * FROM OPENQUERY( SADATABASE, 'SELECT ID, Surname, GivenName FROM [GROUPO].[Customers] WHERE Surname = ''Elkins''' ) |
Microsoft SQL Server 対話型アプリケーションまたは SQL Server スクリプトを使用して、SQL Anywhere OLE DB プロバイダを使用するリンクサーバを設定できます。
リンクサーバの設定の前に、Windows Vista 以降の Windows を使用するときに、2、3 考慮すべきことがあります。SQL Server は、システムのサービスとして実行します。Windows Vista 以降のバージョンでサービスが設定される方法に従い、サービスが共有メモリ接続を使用できない可能性、サーバを起動できない可能性、およびユーザデータソース定義にアクセスできない可能性があります。たとえば、[ネットワーク サービス] としてログインするサービスがサーバを起動できない、共有メモリ経由で接続できない、ユーザデータソースをアクセスできないなどがあります。これらの状況において、SQL Anywhere サーバは、事前に起動させる必要があり、TCPIP 接続プロトコルを使用する必要があります。また、データソースが使用される予定の場合、システムデータソースにする必要があります。
インタラクティブなアプリケーションを使用したリンクサーバの設定
スクリプトを使用したリンクサーバの設定
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |