在单个服务器上删除所有SQL Server连接的服务器

4
我正在使用连接到本地 SQL Server 2000 的 SQL Server Management Studio 2008(ssms.exe),所以我注意到每次尝试进入“链接服务器”选项时,它会立即崩溃,因此我想删除所有的服务器链接,然后再尝试一遍。
我应该使用什么脚本或在 T-SQL 中运行什么命令来删除所有链接服务器而不指定每个链接服务器的名称?
谢谢。
6个回答

9
您可以使用数据库游标执行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
在选择“sp_dropserver''' + [name] +'''' from sys.servers...”之后,您可以添加WHERE is_linked = 1。 - Eric Higgins

1

连接到服务器时:

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

运行输出的第一列。胜利。

这也允许您挑选要摆脱哪个服务器。它可能挂在连接上,从服务器获取无法处理的垃圾或损坏的链接驱动程序。


1

我该如何执行第二个选项?听起来很有趣。 - Jonathan Escobedo

0

没有游标的版本。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

你不能随意从每个服务器中删除所有链接的服务器。你至少需要打开到每个服务器的连接,并为每个链接的服务器运行某种形式的脚本或命令。如果你想知道如何编写一个脚本来删除所有链接的服务器,我建议你首先查看 sp_linkedserverssp_dropserver


这不是OP所问的。他们想要从单个服务器中删除所有LS。 - Eric Higgins
@EricHiggins - 当然可以...他们需要为每个链接服务器运行一个命令,具体来说是sp_dropserver。我会说这不是一个很好的答案,因为我没有为OP编写脚本,但它确实回答了问题。 - Nathan Wheeler

0

当它崩溃时,您是否收到任何错误消息?另外,对应的 SQL 2000 服务器的服务包是什么?

我宁愿修复这个工具的问题,而不是简单地重新创建它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接