この記事では、Transact-SQLを使用してSQLServerのリンクサーバーを削除する例を示します。
リンクサーバーを削除するには、sp_dropserver
を使用します システムストアドプロシージャ。これにより、SQLServerのローカルインスタンス上の既知のリモートサーバーとリンクサーバーのリストからサーバーが削除されます。このストアドプロシージャは、サーバー名と、サーバーに関連付けられているログインを削除するためのオプションの引数の2つの引数を受け入れます。
例1-リンクサーバーとそのログインを削除する
リンクサーバーとそのリンクサーバーに関連付けられているすべてのログインを削除する例を次に示します。この場合、リンクされたサーバーは「ホーマー」と呼ばれます。
EXEC sp_dropserver 'Homer', 'droplogins';
結果:
Commands completed successfully.
他のストアドプロシージャと同様に、引数名を明示的に含めることもできます。ただし、これによって結果が変わることはありません。リンクされたサーバーは、関連付けられたログインとともに削除されます。
EXEC sp_dropserver @server = 'Homer', @droplogins = 'droplogins';
結果:
Commands completed successfully.
例2–ログインを削除せずにリンクサーバーを削除する
前述のように、droplogins
引数はオプションです。次のようにリンクサーバーを削除することもできます:
EXEC sp_dropserver 'Homer';
ただし、リンクサーバーに関連付けられているログインがある場合は、次のエラーが発生します。
Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56 There are still remote logins or linked logins for the server 'Homer'.
つまり、droplogins
を追加する必要があります 引数。
リンクサーバーがレプリケーションパブリッシャーとして構成されている場合にもエラーが発生します。
繰り返しになりますが、必要に応じて引数の名前を明示的に含めることができます。
EXEC sp_dropserver @server = 'Homer', @droplogins = NULL;
結果:
Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56 There are still remote logins or linked logins for the server 'Homer'.
リンクサーバーに関連付けられているログインがない場合でも、エラーは発生しません。たとえば、sp_addlinkedsrvlogin
を使用せずにリンクサーバーを作成した場合 ログインを追加するには、droplogins
を使用せずにサーバーをドロップできます 口論。これは、ローカルログインとリモートサーバー上のログインの間にマッピングが作成された場合でも当てはまります。
したがって、リモートサーバーにMargeというログインがあり、これを localのMargeログインで実行する場合 サーバー:
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.3,1433';
ローカルサーバー上のMargeとリンクサーバー上のMargeの間にマッピングが作成されます。これが可能なのは、両方のログインが同じ資格情報を共有しているためです。この場合、sp_addlinkedsrvlogin
を実行する必要はありません。 リンクサーバーのログインとしてMargeを追加します。
ただし、リンクサーバーにMargeに対応するログインがない場合(またはあるが、資格情報が一致しない場合)、マッピングは行われず、Margeはリンクサーバーにアクセスできません。
いずれにせよ、次のコードを実行すると成功します:
EXEC sp_dropserver @server = 'Homer', @droplogins = NULL;
結果:
Commands completed successfully.
ローカルログインとリンクサーバーの間にマッピングがある場合でも、これはMargeに対して正常に完了します(ただし、リンクサーバーの他のログインはありません)。