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のデータベースを参照する方法のご紹介でした。