如何为同一SQL Server创建多账号自定义名称的链接服务器?
解决方案:创建自定义名称的链接服务器并设置默认数据库
完全可以创建名称与实际服务器地址不符的链接服务器,这是SQL Server的常规用法。你可以为每个数据库创建独立的链接服务器,指向同一个实际服务器the.database,同时绑定对应账号密码,并设置默认数据库,以此实现简化的访问语法。
具体实现步骤
1. 创建对应数据库的链接服务器
分别为db_a、db_b、db_c创建自定义名称的链接服务器,指定同一个目标服务器地址,并绑定各自的登录凭证:
创建db_a链接服务器
-- 创建名为db_a的链接服务器,指向实际服务器the.database EXEC master.dbo.sp_addlinkedserver @server = N'db_a', @srvproduct=N'SQL Server', @datasrc=N'the.database'; -- 核心:指定实际服务器地址 -- 绑定db_a的专属登录账号 EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'db_a', @useself=N'False', @rmtuser=N'user_a', @rmtpassword=N'password_a'; -- 设置默认数据库为db_a,访问时无需额外指定数据库名 EXEC master.dbo.sp_serveroption @server=N'db_a', @optname=N'default catalog', @optvalue=N'db_a'; -- 开启排序规则兼容,避免跨服务器查询冲突 EXEC master.dbo.sp_serveroption @server=N'db_a', @optname=N'collation compatible', @optvalue=N'true';
创建db_b链接服务器
EXEC master.dbo.sp_addlinkedserver @server = N'db_b', @srvproduct=N'SQL Server', @datasrc=N'the.database'; EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'db_b', @useself=N'False', @rmtuser=N'user_b', @rmtpassword=N'password_b'; EXEC master.dbo.sp_serveroption @server=N'db_b', @optname=N'default catalog', @optvalue=N'db_b'; EXEC master.dbo.sp_serveroption @server=N'db_b', @optname=N'collation compatible', @optvalue=N'true';
创建db_c链接服务器
EXEC master.dbo.sp_addlinkedserver @server = N'db_c', @srvproduct=N'SQL Server', @datasrc=N'the.database'; EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'db_c', @useself=N'False', @rmtuser=N'user_c', @rmtpassword=N'password_c'; EXEC master.dbo.sp_serveroption @server=N'db_c', @optname=N'default catalog', @optvalue=N'db_c'; EXEC master.dbo.sp_serveroption @server=N'db_c', @optname=N'collation compatible', @optvalue=N'true';
简化访问方式
创建完成后,即可使用你期望的简洁语法访问对应数据库的表:
-- 访问db_a中的表 SELECT TOP 10 * FROM [db_a].dbo.some_table; -- 访问db_b中的表 SELECT TOP 10 * FROM [db_b].dbo.some_table; -- 访问db_c中的表 SELECT TOP 10 * FROM [db_c].dbo.some_table;
关键参数说明
@datasrc:指定实际的目标服务器地址,这是多个链接服务器指向同一物理服务器的核心配置。default catalog:设置链接服务器的默认数据库,省去访问时必须指定数据库名的步骤。collation compatible:开启后可避免跨服务器查询时的排序规则不兼容问题,提升查询稳定性。
内容的提问来源于stack exchange,提问作者Darren Oakey
相关产品推荐
相关产品推荐

