sql >> データベース >  >> RDS >> Sqlserver

T-SQLを使用してSQLServerのリンクサーバーを削除する

    この記事では、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に対して正常に完了します(ただし、リンクサーバーの他のログインはありません)。


    1. LinuxベースのSQLServerインスタンス間のAlwaysON可用性グループについて理解する。パート1

    2. PostgreSQL列は存在しませんが、実際には存在します

    3. MicrosoftAccessのヒントとコツパート2–フォーム

    4. sqlparameterをIN()に渡す方法は?