Тази статия предоставя пример за използване на Transact-SQL за премахване на свързан сървър в SQL Server.
За да премахнете свързан сървър, използвайте sp_dropserver
системна съхранена процедура. Това премахва сървър от списъка с известни отдалечени и свързани сървъри на локалния екземпляр на SQL Server. Тази съхранена процедура приема два аргумента:името на сървъра и незадължителен аргумент за премахване на всички данни за влизане, свързани със сървъра.
Пример 1 – Изхвърлете свързан сървър и неговите данни за влизане
Ето пример за премахване на свързан сървър и всички свързани данни за влизане за този свързан сървър. В този случай свързаният сървър се нарича „Homer“.
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, и аз стартирам това под името 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.
Това завършва успешно за Мардж, дори когато има съпоставяне между нейното локално влизане и свързания сървър (но няма други данни за влизане за свързания сървър).