Удалить все связанные серверы SQL Server на одном сервере - PullRequest
4 голосов
/ 06 января 2010

Я использую SQL Server Management Studio 2008 (ssms.exe), подключенную к локальному SQL Server 2000, поэтому я замечаю, что каждый раз, когда я пытаюсь войти в параметр «Связанный сервер», происходит сбой, поэтому я хочу удалить все серверы, связанные с попробуйте еще раз.

Какой сценарий я должен использовать или какую команду на T-SQL я должен запустить для удаления всех и без указания имени каждого связанного сервера.

Спасибо

Ответы [ 6 ]

9 голосов
/ 03 августа 2010

Вы можете выполнить sp_dropserver для всех связанных серверов, используя курсор базы данных. В следующем примере показано, как это сделать.

    DECLARE @sql NVARCHAR(MAX)

    DECLARE db_cursor CURSOR FOR  
        select 'sp_dropserver ''' + [name] + '''' from sys.servers

    OPEN db_cursor   
    FETCH NEXT FROM db_cursor INTO @sql   

    WHILE @@FETCH_STATUS = 0   
    BEGIN   

           EXEC (@sql)

           FETCH NEXT FROM db_cursor INTO @sql   
    END   

    CLOSE db_cursor   
    DEALLOCATE db_cursor
1 голос
/ 04 июня 2010

при подключении к серверу:

select 'exec sp_dropServer ''' + name + '''', * from sys.servers where is_linked = 1

запустить выведенный первый столбец. выиграть.

Это также позволяет вам выбрать сервер, от которого вы хотите избавиться. Возможно, он зависает на соединении, получает мусор, не знает, как обрабатывать его с сервера, или поврежден драйвер ссылки.

1 голос
/ 06 января 2010

Я думаю, что вы можете удалять только на связанном сервере одновременно, используя sp_dropserver:

http://msdn.microsoft.com/en-us/library/ms174310.aspx

Вы можете позвонить sp_linkedservers

http://msdn.microsoft.com/en-us/library/ms189519.aspx

чтение возвращенного списка во временную таблицу, а затем цикл по этой таблице, вызывая sp_dropserver для каждого элемента.

0 голосов
/ 13 марта 2014

Версия без курсора.server_id = 0 - это локальный сервер, а не связанный сервер.

--remove all linked servers    
declare @sql nvarchar(max)

while exists (select 1 from sys.servers where server_id>0)
begin
    select @sql= N'sp_dropserver ' + [name] from sys.servers where server_id>0  
    exec (@sql)
end
0 голосов
/ 21 июля 2010

Получаете ли вы сообщение об ошибке при сбое? И что такое пакет обновления соответствующего сервера SQL 2000?

Я бы скорее решил проблему с этими инструментами, чем просто заново их обновил.

0 голосов
/ 06 января 2010

Вы не можете просто произвольно удалить все связанные серверы с каждого сервера. Вам нужно (как минимум) открыть соединение с каждым сервером и запустить какую-либо форму скрипта или команды для каждого связанного сервера. Если вы хотите знать, как написать скрипт для удаления всех связанных серверов, я предлагаю вам начать с просмотра sp_linkedservers и sp_dropserver.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...