我正在使用连接到本地 SQL Server 2000 的 SQL Server Management Studio 2008(ssms.exe),所以我注意到每次尝试进入“链接服务器”选项时,它会立即崩溃,因此我想删除所有的服务器链接,然后再尝试一遍。
我应该使用什么脚本或在 T-SQL 中运行什么命令来删除所有链接服务器而不指定每个链接服务器的名称?
谢谢。
我应该使用什么脚本或在 T-SQL 中运行什么命令来删除所有链接服务器而不指定每个链接服务器的名称?
谢谢。
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
连接到服务器时:
select 'exec sp_dropServer ''' + name + '''', * from sys.servers where is_linked = 1
运行输出的第一列。胜利。
这也允许您挑选要摆脱哪个服务器。它可能挂在连接上,从服务器获取无法处理的垃圾或损坏的链接驱动程序。
我认为您一次只能使用 sp_dropserver
删除一个关联服务器:
http://msdn.microsoft.com/en-us/library/ms174310.aspx
你可以调用sp_linkedservers
。
http://msdn.microsoft.com/en-us/library/ms189519.aspx
将返回的列表读入临时表中,然后循环遍历该表,为每个元素调用sp_dropserver
。
没有游标的版本。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
你不能随意从每个服务器中删除所有链接的服务器。你至少需要打开到每个服务器的连接,并为每个链接的服务器运行某种形式的脚本或命令。如果你想知道如何编写一个脚本来删除所有链接的服务器,我建议你首先查看 sp_linkedservers
和 sp_dropserver
。
sp_dropserver
。我会说这不是一个很好的答案,因为我没有为OP编写脚本,但它确实回答了问题。 - Nathan Wheeler当它崩溃时,您是否收到任何错误消息?另外,对应的 SQL 2000 服务器的服务包是什么?
我宁愿修复这个工具的问题,而不是简单地重新创建它们。