Sql server OPENDATASOURCE(Transact-SQL)-连接到多个表

Sql server OPENDATASOURCE(Transact-SQL)-连接到多个表,sql-server,Sql Server,我有一个OPENDATASROUCE的用例。但是,我的SQL查询有多个具有左联接的表。 大多数示例只有一个表。如果我有两个表(第二个表有左连接),如何连接 下面是一个典型的例子,效果很好: SELECT * FROM OPENDATASOURCE('SQLNCLI', 'Data Source=RemoteServerName;Integrated Security=SSPI').Billing.dbo.Invoices 但我需要将发票表与“客户”表连接起来,如下所示。我不知

我有一个OPENDATASROUCE的用例。但是,我的SQL查询有多个具有左联接的表。 大多数示例只有一个表。如果我有两个表(第二个表有左连接),如何连接

下面是一个典型的例子,效果很好:

   SELECT   *
    FROM OPENDATASOURCE('SQLNCLI', 'Data Source=RemoteServerName;Integrated Security=SSPI').Billing.dbo.Invoices
但我需要将发票表与“客户”表连接起来,如下所示。我不知道我是怎么做到的??请帮忙

 SELECT *
FROM OPENDATASOURCE('SQLNCLI', 'Data Source=RemoteServerName;Integrated Security=SSPI').Billing.dbo.Invoices as inv
left join Billing.dbo.customers as cust
on inv.customer = cust.customer

OPENDATASOURCE是使用SQLServer中的“链接服务器”或“分布式查询”功能与远程服务器通信的一种方式。但是,在这种情况下,这可能不是您使用的最佳路径,因为它不允许SQL Server查询优化器重写查询并将部分查询下推到远程源(与本地数据库相比,可能会减少通过较慢的网络连接返回给您的行数)。如果可能的话,创建一个实际的链接服务器将对您有所帮助。这将使您可以选择对优化器说“这两个表来自同一个远程源”。然后,优化器可以考虑将一个查询移至连接两个表的远程服务器的计划,应用任何过滤器和组子句,然后将结果返回给调用服务器。 以下是添加链接服务器的机制:

一旦有了远程服务器(我在这里称之为“remote”),就可以使用远程服务器的4部分名称语法编写查询,而不是使用OPENDATASOURCE

SELECT * FROM REMOTE.Billing.DBO.Invoices LEFT JOIN REMOTE.Billing.DBO.Invoices on <join condition> <WHERE clause>
选择*FROM REMOTE.Billing.DBO.Invoices LEFT加入REMOTE.Billing.DBO.Invoices on
下面是一篇关于链接服务器如何在封面下工作的论文,它应该为您提供一个概念性的概述,说明为什么这种方法可能更适合您:


祝你好运

多谢各位。我无法将服务器链接到我的windows身份验证。这里需要一些帮助。我记得关于这个主题的最佳参考是:请注意,如果您使用Kerberos,您可能需要配置域控制器以允许委派。NTLM更简单。如果完全卡住,可以使用以下存储过程将SQL Server中的用户映射到凭据: