SQL Server 2014インスタンスにリンクサーバーを作成しようとしていますservername\instancename
次の呼び出しを使用:
EXEC master.dbo.sp_addlinkedserver
@server = N'servername\instancename',
@srvproduct=N'SQL Server'
エラーが発生します:
Msg 15028, Level 16, State 1, Procedure sp_addlinkedserver, Line 82
The server 'servername\instancename' already exists.
これはSQL Server 2005で正常に動作し、 [〜#〜] msdn [〜#〜] に従って、
リンクサーバーは、SQL Serverの別のインスタンスである必要はありません。
したがって、これを許可していない最近のバージョンで何が変更されたかはわかりません。 UIを使用すると、同様のメッセージが生成されます。
ローカルSQL Serverをリンクサーバーとして作成することはできません。
リクエストするのは奇妙なことだと私は理解していますが、2005年に機能していた(かつては別のインスタンスに存在していた)レガシーコードをサポートすることです。ドキュメントには、それは機能するはずであると記載されていますが、機能しません。これを2014年に機能させる方法はありますか、または基になるコードを変更する必要がありますか?
さまざまなパラメーターで機能させることができたことがわかりました。
EXEC master.dbo.sp_addlinkedserver
@server = N'LinkedServerName',
@srvproduct=N'',
@provider=N'SQLNCLI',
@provstr=N'DRIVER={SQL Server};Server=(local)\InstanceName; Initial Catalog=DBNAME;uid=user;pwd=password;'
コード内でリンクサーバーの参照を処理する代わりに、現在リンクサーバーがある場所での synonym の使用を含む1回限りのコードへの投資を検討することをお勧めします。
だから代わりに:
SELECT whatever FROM someserver.somedb.dbo.mytable;
同義語があります:
CREATE SYNONYM dbo.mytablepointer FOR someserver.somedb.dbo.mytable;
次に、コードは単純です:
SELECT whatever FROM dbo.mytablepointer;
次に、オブジェクトを別のサーバーに移動した場合は、類義語を削除して再作成するだけで、コードを変更する必要はありません。
DROP SYNONYM dbo.mytablepointer;
CREATE SYNONYM dbo.mytablepointer FOR otherserver.somedb.dbo.mytable;
このコマンドを実行-ローカルサーバーをリンクサーバーとして使用でき、コードの変更は不要
EXEC sp_addlinkedserver @server = 'LinkedServerName',
@provider ='SQLNCLI',
@datasrc ='LocalServerName',
@srvproduct = 'SQL'