自身を指すリンクサーバーの作成


14

servername\instancename次の呼び出しを使用して、SQL Server 2014インスタンスにリンクサーバーを作成しようとしています。

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年にこれを機能させる方法はありますか、それとも基になるコードを変更する必要がありますか?


1
実際には違いはありません。ローカルサーバーで4部構成の識別子を使用できます。
クリス・グルッテマイヤー14

ローカルサーバーへのリンクサーバーを作成しようとするのはなぜですか?どの部分が機能しないのですか?多分それはあなたの質問がどうあるべきかです...
アーロンバートランド

1
レガシーコードは、リンクサーバーを介して接続するさまざまなインスタンス用に作成されました。歴史のある時点で、2つのインスタンスは単一のインスタンスにマージされましたが、コードとリンクサーバーは変更されませんでした。私の目標は、コードをそのままサポートすることです。a)コードの変更に関与するものがわからないため、b)メインの開発者は、将来、別々のインスタンスに分散されるデータベースをサポートできるようにしたいからです。
mathewb 14

3
同義語を検討することもできます。次に、オブジェクトを別のサーバーに移動した場合は、類義語をドロップして再作成するだけで、コードを変更する必要はありません。
アーロンバートランド

ありがとうアーロン。それがまさに私が探していたものだと思います。1つのデータベースは同義語を使用しているため、4つの部分からサーバー名を削除して削除するだけです。その後、リンクサーバーを完全に削除できます。データベースが後で移動される場合、リンクサーバー名を同義語に追加し直すことができます。とった。
mathewb 14

回答:


20

さまざまなパラメーターで動作させることができたことがわかりました。

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;'

11

コード内のリンクサーバー参照を処理する代わりに、類義語の使用を伴う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;

3

このコマンドを実行する-リンクサーバーとしてローカルサーバーを使用できます。コードを変更する必要はありません。

EXEC sp_addlinkedserver @server = 'LinkedServerName',
                        @provider ='SQLNCLI',
                        @datasrc ='LocalServerName',
                        @srvproduct = 'SQL'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.