2010-01-06 62 views
4

使用与本地SQL Server 2000连接的SQL Server Management Studio 2008(ssms.exe),所以我注意到每次我尝试在链接服务器上输入选项时,它都会中断地崩溃,所以我想要删除所有服务器链接在那里再试一次。在单台服务器上删除所有SQL Server链接服务器

我应该使用什么脚本或T-SQL上的哪些命令我必须运行以删除所有文件,而无需指定链接的每个服务器的名称。

感谢

回答

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

从sys.servers中选择'sp_dropserver'''+ [name] +''''...你可以为'sp_dropserver'添加WHERE is_linked = 1 – 2012-10-17 22:46:38

+1

+1,这就是我们要找的。 – AceMark 2013-09-06 07:48:59

0

您不能随意删除每台服务器上的所有链接服务器。您必须(至少)打开每个服务器的连接,并为每个链接的服务器运行某种形式的脚本或命令。如果您想知道如何编写脚本来删除所有链接的服务器,我建议您首先查看sp_linkedserverssp_dropserver

+0

这不是OP要求的。他们想要从一台服务器上删除所有的LS。 – 2012-10-17 22:47:45

+0

@EricHiggins - 当然是......他们需要为每个链接的服务器运行一个命令,特别是'sp_dropserver'。我会说这不是一个好的答案,因为我没有为OP写脚本,但它肯定回答了这个问题。 – 2012-10-22 20:51:17

1

虽然连接到服务器:

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

运行输出第一列。赢得。

这也允许你选择你想摆脱的服务器。它可能挂在连接上,发生垃圾,它不知道如何处理服务器或链接驱动程序。

0

它在崩溃时是否收到任何错误消息? 什么是相应的SQL 2000服务器的服务包?

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

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