SQLServerで他のSQLServerのデータベースを参照する
SQLServerで他のSQLServerのデータベースを参照する方法を紹介します。
コーディング例
BEGIN
DECLARE @DataSource VARCHAR(MAX) = 'localhost\MSSQL';
DECLARE @LoginUserID VARCHAR(MAX) = 'sa';
DECLARE @LoginPassword VARCHAR(MAX) = 'xxxxxxxxxx';
EXEC sp_addlinkedserver
@server = 'LINKSRV'
,@srvproduct = ''
,@provider = 'SQLNCLI'
,@datasrc = @DataSource
;
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'LINKSRV'
,@useself = 'FALSE'
,@locallogin = @LoginUserID
,@rmtuser = @LoginUserID
,@rmtpassword = @LginPassword
;
SELECT * FROM [LINKSRV].[TestDB].dbo.TestTable;
END
解説
6行目の「sp_addlinkedserver」というシステムストアドプロシージャを実行し、リンクサーバを作成しています。
引数@serverに作成するリンクサーバの名前、引数@srvproductはリンクサーバとして追加するOLE DBデータソースを指定しますが、相手がSQLServerの場合は指定しません。引数@providerに「SQLNCLI」を指定すると自動的に一番新しい Server Native Client OLE DB Provider を選択してくれます。引数@datasrcへ接続するSQLServerのデータソース名を「(IPアドレスまたはサーバ名)\(インスタンス名)」で指定します。
次に13行目の「sp_addlinkedsrvlogin」というシステムストアドプロシージャを実行し、ローカルのSQLServer上のログインとリンクサーバ上のリモートログインとのマッピングを自動生成します。
引数@rmtsrvnameに「sp_addlinkedserver」で作成したリンクサーバ名を指定し、引数@useselfに「FALSE」を指定しSQLServer認証を選択しています。「TRUE」を指定するとWindows認証となります。引数@localloginにローカルサーバ上のログインを指定し、引数@rmtuser、@rmtpasswordにリンクサーバのリモートログインとパスワードを指定します。
リンクサーバ上のテーブルを参照するには21行目のように「リンクサーバ名」.「データベース名」.「スキーマ名」.「テーブル名」と記載します。
リンクサーバを使用することでローカルサーバ上のテーブルとリンクサーバ上のテーブルを表結合することも可能です。
以上、SQLServerで他のSQLServerのデータベースを参照する方法のご紹介でした。








