Tento článek poskytuje příklad použití Transact-SQL k odebrání propojeného serveru v SQL Server.
Chcete-li odebrat propojený server, použijte sp_dropserver
uložená procedura systému. Tím se server odebere ze seznamu známých vzdálených a propojených serverů na místní instanci serveru SQL Server. Tato uložená procedura přijímá dva argumenty:název serveru a volitelný argument pro odstranění všech přihlášení spojených se serverem.
Příklad 1 – Zrušte propojený server a jeho přihlášení
Zde je příklad zrušení propojeného serveru a všech přidružených přihlášení pro tento propojený server. V tomto případě se propojený server nazývá „Homer“.
EXEC sp_dropserver 'Homer', 'droplogins';
Výsledek:
Commands completed successfully.
Stejně jako u jakékoli uložené procedury můžete také explicitně zahrnout názvy argumentů. To však nemění výsledek – propojený server je zrušen spolu s přidruženými přihlášeními.
EXEC sp_dropserver @server = 'Homer', @droplogins = 'droplogins';
Výsledek:
Commands completed successfully.
Příklad 2 – Zrušte propojený server bez zrušení jeho přihlášení
Jak již bylo zmíněno, droplogins
argumenty jsou nepovinné. Propojený server můžete také zrušit takto:
EXEC sp_dropserver 'Homer';
Pokud jsou však k propojenému serveru přidružena nějaká přihlášení, zobrazí se následující chyba:
Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56 There are still remote logins or linked logins for the server 'Homer'.
To znamená, že budete muset přidat droplogins
argument.
Chyba se zobrazí také v případě, že je propojený server nakonfigurován jako vydavatel replikace.
Opět můžete explicitně uvést názvy argumentů, pokud chcete:
EXEC sp_dropserver @server = 'Homer', @droplogins = NULL;
Výsledek:
Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56 There are still remote logins or linked logins for the server 'Homer'.
Pokud k propojenému serveru nejsou přidružena žádná přihlášení, nezobrazí se chyba. Pokud například vytvoříte propojený server bez použití sp_addlinkedsrvlogin
pro přidání přihlašovacích údajů budete moci server zrušit bez použití droplogins
argument. To platí i v případě, že bylo vytvořeno mapování mezi vaším místním přihlášením a přihlášením na vzdáleném serveru.
Takže pokud má vzdálený server přihlašovací jméno s názvem Marge a spustím to pod přihlašovacím jménem Marge na místním server:
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.3,1433';
Vytvoří se mapování mezi Marge na místním serveru a Marge na propojeném serveru. To je možné, protože obě přihlášení sdílejí stejné přihlašovací údaje. V tomto případě není nutné spouštět sp_addlinkedsrvlogin
přidat Marge jako přihlašovací jméno pro propojený server.
Pokud však na propojeném serveru neexistuje odpovídající přihlášení pro Marge (nebo pokud existuje, ale přihlašovací údaje se neshodují), mapování neproběhne a Marge nebude mít přístup k propojenému serveru.
Ať tak či onak, spuštění následujícího kódu bude úspěšné:
EXEC sp_dropserver @server = 'Homer', @droplogins = NULL;
Výsledek:
Commands completed successfully.
To se pro Marge úspěšně dokončí, i když existuje mapování mezi jejím místním přihlášením a propojeným serverem (ale žádná jiná přihlášení pro propojený server).