在SQL Server中更改链接服务器的属性

23

有没有办法更改现有链接服务器的属性(产品名称、数据源、提供程序字符串等)?当我进入属性屏幕时,所有选项都是灰色的。


在 SSMS 中,如果您“连接”(左上方),并且具有权限,则可以管理服务器。 - paparazzo
9个回答

37

这是该命令。

EXEC master.dbo.sp_serveroption @server=N'<SERVERNAME>', @optname=N'name', @optvalue=N'<NEWNAME>'

使用当前链接服务器的名称替换'SERVERNAME'。使用您想要赋予链接服务器的新名称替换'NEWNAME'。


我尝试了这个解决方案,它在 SQL 2016 SP1 上有效。 - Magier
2
这适用于链接服务器的名称以及其他一些选项,但不幸的是不适用于数据源。有关支持的选项的详细信息,请参见此处:https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-serveroption-transact-sql?view=sql-server-2017 - Mike
非常好用,谢谢。在重命名我的链接服务器后,我右键单击它,选择SCRIPT AS DROP AND CREATE,据我所知,它不再创建到链接服务器实际位置的引用。这看起来有点棘手,不是吗? - Ethan1701

27
在SQL Server管理工具中,右键单击链接服务器,选择"脚本链接服务器为",然后选择"DROP和CREATE to",最后选择"新查询编辑器窗口"。现在可以在脚本中调整任何要调整的设置,然后运行它。现有的链接服务器将被删除并创建一个新的链接服务器。

5
这不会重新创建凭据的任何密码(除非它们是“#######”)。 - Monty Wild

8

您唯一的选择是使用sp_setnetname。您可以使用它来更改链接服务器(目标)的data_source,例如:

DECLARE @name sysname = 'SRVRNAME', @datasource sysname = 'srvr.name.com';
EXECUTE sp_setnetname @server = @name, @netname = @datasource;

4
请注意,此方法仅适用于连接的 SQL Server。如果链接的服务器不是 SQL Server,则无法使用。 - Abraham
有时甚至连这个都不行 - 只需在 R2 服务器上设置一个链接服务器到一个 2005 服务器,然后尝试使用 sp_setnetname 指向一个 2012 SQL Server。虽然显示成功,但仍然查询旧的服务器,当我重新生成链接服务器脚本时,仍然显示为指向原始服务器。 - mbourgon

3

我通过使用@optname=N'name'和sp_serveroption命令成功修改了联接服务器的名称。在BOL sp_serveroption文档中并未提到此选项。


2

我最终创建了一个新的关联服务器并删除了旧的。不幸的是,没有办法编辑现有实例。


2
不完全是这样。当然,这取决于您想要更改哪个属性。但是,根据我的答案,您会发现可以使用单个脚本指令更改某些选项。 - Steve

1
合并不同的响应,以及阅读文档 - 这仅适用于SQL链接服务器,而不是替代数据源。
select server_id, name, data_source from sys.servers where product = 'SQL Server'

DECLARE @oldName nvarchar(30) = 'oldSERVER', --must match current entry under sys.servers.name
@name sysname = 'newServer', 
@datasource sysname = 'newServer.DNSDomainName.com' -- can be a windows FDQN that is not SQL valid if needed for RPC cross domain resolution

/* Comment out this marker to perform update
EXEC master.dbo.sp_serveroption @server=@oldName, @optname=N'name', @optvalue=@name
EXECUTE sp_setnetname @server = @name, @netname = @datasource;

select server_id, name, data_source from sys.servers where product = 'SQL Server'
--*/

如果我从sys.servers运行第一个select语句,它不会显示链接的服务器。它只显示当前本地SQL服务器,尽管链接的服务器也是SQL Server 2016。如果您删除“where product ='SQL Server'”,它也会显示链接的服务器。 - Vlad S.
实际上最好使用“select server_id, name, data_source from sys.servers where is_linked=1”只查看已链接的服务器。 - Vlad S.

0

请查看sp_serveroption。这就是GUI最终要做的事情。如果最终不允许更改您尝试更改的内容,您应该从此存储过程中获得有意义的错误消息。


0

我的经验是(我正在使用SQL Server 2016连接到SQL Server 2012实例,并且我想重命名链接服务器并更改它的目标),我需要结合Xipooo和Jordan Parker的答案。

sp_serveroption可以重命名链接服务器,而sp_setnetname可以更改链接服务器的目标。


-3

前往开始 - 管理工具,打开数据源 (odbc),然后点击系统 dsn,在这里你会找到联接服务器的 dsn 名称。从这里可以编辑联接服务器的属性,也可以测试连接。

~ Kishore SG


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