从 SQL Server 中的两个不同服务器中选择数据

新手上路,请多包涵

如何从 SQL Server 中两个不同服务器上的两个不同数据库中选择同一查询中的数据?

原文由 Don Of Qau 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 444
1 个回答

我希望上面提到的所有澄清都回答了OP的原始问题。我只想添加一个用于将 SQL Server 添加为链接服务器的代码片段。

最基本的,我们可以通过执行 sp_addlinkedserver 只需一个参数 @server 来简单地将 SQL Server 添加为链接服务器,即

-- using IP address
exec sp_addlinkedserver @server='192.168.1.11'
-- PC domain name
exec sp_addlinkedserver @server='DESKTOP-P5V8JTN'

SQL Server 将自动用默认值填充 SRV_PROVIDERNAMESRV_PRODUCTSRV_DATASOURCE 等。通过这样做,我们必须在查询的 4 部分表地址中写入 IP 或 PC 域名(示例如下)。当链接服务器 没有默认端口或实例 时,这可能更烦人或可读性更低,地址将类似于 192.168.1.11,1430192.168.1.11,1430\MSSQLSERVER2019

因此,为了保持 4 部分地址简短易读,我们可以通过指定其他参数来为服务器添加别名而不是完整地址,如下所示 -

 exec sp_addlinkedserver
    @server='ReadSrv1',
    @srvproduct='SQL Server',
    @provider='SQLNCLI',
    @datasrc='192.168.1.11,1430\MSSQLSERVER2019'

但是当您执行查询时,将显示以下错误 You cannot specify a provider or any properties for product 'SQL Server'. 如果我们将服务器产品属性值保留为空 '' 或任何其他值,则查询将成功执行。

下一步,通过执行以下查询登录到远程链接服务器 -

 EXEC sp_addlinkedsrvlogin @rmtsrvname = 'ReadSrv1', @useself = 'false', @locallogin = NULL, @rmtuser = 'sa', @rmtpassword = 'LinkedServerPasswordForSA'

最后,使用 4 部分地址的链接服务器,语法是 -

[ServerName].[DatabaseName].[Schema].[ObjectName]

例子-

 SELECT TOP 100 t.* FROM ReadSrv1.AppDB.dbo.ExceptionLog t

  • 要列出现有的链接服务器,请执行:

exec sp_linkedservers - 要删除链接服务器,请执行:

exec sp_dropserver @server = 'ReadSrv1', @droplogins='droplogins' (也删除登录名)或

exec sp_dropserver @server = 'ReadSrv1', @droplogins='NULL' (保持登录)

原文由 quasar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进