STEP 3. Integration Services による エクスポートとインポート
3.7 リンク サーバーによる外部データのクエリ
64
次に、[サーバーの種類]で「その他のデータ ソース」を選択して、[プロバイダー]で
「Microsoft Office 12.0 Access Database Engine OLE DB Provider」を選択します。
[製品名]へは、任意の文字(画面は Access 2010)を入力し、[データ ソース]へ Access データベース(.accdb または .mdb ファイル)へのパスを入力します(ここでは、
C:\temp\ノースウィンド.accdb)。
設定後、[OK]ボタンをクリックすれば、リンク サーバーの作成が完了です。
Note: [製品名]や[プロバイダー文字列]の設定
リンク サーバーの設定画面の、データ ソースに対する[プロバイダー]や[製品名](product_name)、[プロ バイダー文字列](provider_string)については、SQL Server オンライン ブックの Transact-SQL リファレン スにある「sp_addlinkedserver」で詳しく解説されています。
3. 作成したリンク サーバーを次のように展開すると、Access データベース内のテーブルの一 覧を参照することができます。
1
プロバイダ名 や製品名
66
Note: エラー「アクセスが拒否されました」や「初期化できませんでした」が表示される場合
テーブルを展開するときに、次のように「アクセスが拒否されました」エラーが発生する場合は、OPENROWSET の ときと同様、「AllowInProcess」と「DynamicParameters」プロパティを有効化しておくようにします。
また、「データ ソース オブジェクトが初期化できませんでした」エラーが発生する場合は、SQL Server のサービ ス アカウントの temp フォルダーに対して NTFS アクセス許可を設定したり、ファイルのパスが間違っていない かなどを確認してみてください。
4. 次に、作成したリンク サーバー「NW」を利用して、「社員」テーブルのデータを参照してみ ましょう。
SELECT * FROM NW...社員
1
リンク サーバーでは、「リンク サーバー名.データベース名.スキーマ名.テーブル名」という 構文でテーブルへアクセスできますが、Access の場合は、リンク サーバー自体がデータベ ースなので、データベース名を省略しています。また、Access にはスキーマも存在しないの で、これも省略して、「NW...社員」と記述しています。
このようにリンク サーバー機能を利用すると、OPENROWSET 関数のように、毎回プロバイ ダーを指定したり、接続パスを書かなくて済むようになるので、大変便利です。
Note: コマンドでリンク サーバーを作成する: sp_addlinkedserver
リンク サーバーは、sp_addlinkedserver システム ストアド プロシージャを利用して、コマンドで作成するこ とも可能です。これは、次のように利用します。
EXEC master..sp_addlinkedserver @server = N'NW'
, @srvproduct = N'Access 2010'
, @provider = N'Microsoft.ACE.OLEDB.12.0' , @datasrc = N'C:\temp\ノースウィンド.accdb'
■ スクリプト生成機能
GUI ベースで作成したリンク サーバーは、次のようにスクリプト生成機能を利用して、sp_addlinkedserver を
自動生成できるので、便利です。
1
sp_addlinkedserver が自動生成される 2
68
リモート SQL Server に対してリンク サーバーを作成する場合
リモートの SQL Server(別マシンにインストールされた SQL Server 2012 や下位バージョン の SQL Server)に対してリンク サーバーを作成する場合は、次のように操作します。
1. まず、Management Studio で[リンク サーバー]フォルダーを右クリックして[新しいリ ンク サーバー]をクリックします。
2. [新しいリンク サーバー]ダイアログが表示されたら、[サーバーの種類]で「SQL Server」
を選択し、[リンク サーバー]へ接続先の SQL Server のインスタンス名を入力(画面は BAMBOO)します。
3. 次に、[ページの選択]で「セキュリティ」をクリックして、[セキュリティ]ページを開き、
任意の接続方法を選択します。
1
SQL Server の 名前を記述 2
1
画面のように「ログインの現在のセキュリティ コンテキストを使用する」をチェックした場 合は、現在ログインしているユーザー情報を利用して、リモートの SQL Server へのログイ ンを試みるようになります。設定後、[OK]ボタンをクリックすれば、リンク サーバーの作 成が完了です
4. リンク サーバー作成後は、設定した SQL Server 上のデータベースの一覧やテーブルを参照 できるようになります。
クエリを実行するときの構文は、前述したように「リンク サーバー名.データベース名.スキ ーマ名.テーブル名」と 4 つの名前を指定します(画面は BAMBOO という名前の SQL
Server の sampleDB データベース、dbo スキーマ内の「社員」テーブルをクエリしてい
ます)。なお、リンク サーバーが名前付きインスタンスの場合は、[BAMBOO\SQL1] のよ
1
2
3
リモートSQL Server の データベースやテーブルを
一覧できる 1
リンクサーバーを 利用したクエリ実行 2
70