Sql 如何查询连接本地数据库和链接服务器数据库

Sql 如何查询连接本地数据库和链接服务器数据库,sql,sql-server-2008,linked-server,Sql,Sql Server 2008,Linked Server,我已经创建了一个链接服务器,并将其命名为test 当我写一个像 select * from openquery(test, 'select * from account') 它工作正常,但当我运行此查询时: select * from openquery(test, 'select * from account join test1 on account.accountid=test1.student_id') 它抛出了一个错误 链接服务器“测试”的OLE DB提供程序“SQLNCL

我已经创建了一个链接服务器,并将其命名为
test

当我写一个像

select * 
from openquery(test, 'select * from account') 
它工作正常,但当我运行此查询时:

select * 
from openquery(test, 'select * from account join test1 on account.accountid=test1.student_id') 
它抛出了一个错误

链接服务器“测试”的OLE DB提供程序“SQLNCLI10”返回消息 “无法完成延迟的准备。”

我不知道加入这两个服务器有什么不对。

您可以尝试:

select * from test.master.dbo.account 
              join 
              test.master.dbo.test1 
                      on account.accountid=test1.student_id
同样地:

select * from test.master.dbo.account
当两台服务器(链接服务器和本地服务器)中的任何一台使用ms sql 2012及更高版本时。然后,在创建链接服务器时,确保在“提供程序”下拉列表下选择SQL server Native Client 11.0。我不断收到错误的原因是,在“提供程序”下,我选择了SQL Server本机客户端10.0,而我的链接服务器使用的是sql2008,而我的本地服务器是sql2012

解决方案


尝试从openquery(test,“…”)添加别名
select t.*,因为t
@Serg我尝试过它,但仍然给出了相同的错误。它给出了一个错误链接服务器“test”的OLE DB提供程序“SQLNCLI10”不包含表“master”、“dbo”、“account”。该表不存在,或者当前用户对该表没有权限。请写入该表的全名。表recide在哪个数据库中?您应该将master替换为数据库名@RedDevilI。我尝试了您所要求的,但仍然是相同的错误。链接服务器“test”的OLE DB提供程序“SQLNCLI10”不包含表“test”、“dbo”、“test”。该表不存在,或者当前用户对该表没有权限。即使我运行test.dbname.dbo.account,它也会抛出一个错误“Microsoft分布式事务协调器(MS DTC)已停止此事务”您的数据库名是测试吗?以及表名测试
select * from test.account.dbo.account m  
    left join  
         test t  
            on m.accountid=t.student_id