使用链接服务器返回错误 - “无法获取OLE DB提供程序的架构行集”

时间:2013-10-18 23:08:46

标签: sql sql-server sql-server-2008 linked-server

我试图将数据也称为ETL从一个sql server移动到另一个sql server,如上一个问题所述 - Copy data from one column into another column。现在,当我尝试执行查询时出现错误。

查询 -

INSERT INTO [Target_server].[Target_DB1].[dbo].[Target_Table1](Target_Column1)
SELECT Source_Column222
FROM [Source_server].[Source_DB1].[dbo].[Source_Table1]
WHERE Source_Column1 = 'ID7162'

错误 -

OLE DB provider "SQLNCLI" for linked server "MYLINKEDSERVER" returned message "Unspecified error".
OLE DB provider "SQLNCLI" for linked server "MYLINKEDSERVER" returned message "The stored procedure required to complete this operation could not be found on the server. Please contact your system administrator.".
Msg 7311, Level 16, State 2, Line 1
Cannot obtain the schema rowset "DBSCHEMA_TABLES_INFO" for OLE DB provider "SQLNCLI" for linked server "MYLINKEDSERVER". The provider supports the interface, but returns a failure code when it is used.

2 个答案:

答案 0 :(得分:0)

如果你写的那个简单选择不起作用,问题在于链接服务器的安全配置和用户在那里收到的权限。

其中,当您执行查询时,无需为源和目标两个部分指定服务器名称和数据库名称。您只需要在目标服务器和目标数据库上执行查询。在这种情况下,您的查询而不是

INSERT INTO [Target_server].[Target_DB1].[dbo].[Target_Table1](Target_Column1)
SELECT Source_Column222
FROM [Source_server].[Source_DB1].[dbo].[Source_Table1]
WHERE Source_Column1 = 'ID7162'

将如下所示:

INSERT INTO [dbo].[Target_Table1](Target_Column1)
SELECT Source_Column222
FROM [Source_server].[Source_DB1].[dbo].[Source_Table1]
WHERE Source_Column1 = 'ID7162'

您需要在服务器 [Target_server] 和数据库 [Target_DB1] 上打开您的连接。此外,还需要针对 [Target_server] [Source_server] 上检查链接的服务器安全属性。

答案 1 :(得分:-1)

如果您正在使用环回链接服务器(链接服务器引用同一服务器中的同一数据库),请参阅下面提到的链接:

Transaction with loopback linked server - locking issues

如果不是这种情况,this是Microsoft提供的解决方案。