繁体   English   中英

SQL to Oracle Linked Server Openquery检索单行

[英]SQL to Oracle Linked Server Openquery retrieves single row

我正在使用OpenQuery将行集从Oracle表获取到SQL Server中。 然后我发现有一种称为OPENROWSET东西来提取所有行

但这对我没有用。

SELECT a.*
FROM OPENROWSET('MSDASQL',
   'DRIVER={SQL Server};SERVER=INDIANBANK;UID=ags;PWD=mypass',
   'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS') AS a

错误:-

OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).".
OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "(null)".

我的DSN名称:INDIANBANK

我已使用用于ODBC驱动程序的Microsoft OLE DB提供程序来创建链接服务器以连接到oracle (ORACLE DB位于远程服务器上)

我的DSN显示测试连接成功。 与“我的链接服务器”相同。

当我执行以下查询时,请Select * From openquery(IndianBank,'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS') 它仅检索一行

我的链接服务器代码:

EXEC master.dbo.sp_addlinkedserver @server = N'INDIANBANK', @srvproduct=N'IndianBankOracle', @provider=N'MSDASQL', @datasrc=N'INDIANBANK'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'INDIANBANK',@useself=N'False',@locallogin=NULL,@rmtuser=N'ags',@rmtpassword='########'

GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'collation compatible', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'data access', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'dist', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'pub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'rpc', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'rpc out', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'sub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'connect timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'collation name', @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'lazy schema validation', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'query timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'use remote collation', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

如果您使用类似“'MSDASQL','DRIVER = {SQL Server}; SERVER = INDIANBANK; UID = ags; PWD = mypass','Select * From ATM_PROGNOSIS.IR_ATMMON_AGS'''的字符串,则将获得无DSN的连接,因此可以进行测试DSN没用。

我建议你带这个司机
适用于.NET的Oracle数据提供程序
与Oracle友好得多。

这是
ODP.NET的示例
描述调优的地方。

这是ODP.NET的完整文档

希望这可以帮助 :)

请在下面查看我的评论。

PS对于Microsoft驱动程序,参数显示在此处用于ODBC的Microsoft OLE DB提供程序

我对相同问题的解决方案是

在Oracle ODBC驱动程序设置中,将“数值设置”参数设置为“美国数值”。

从ODBC帮助中引用,有问题的内容用下划线标出)数字设置-允许您选择在接收和返回绑定为字符串的数字数据时,哪些数字设置将用于确定小数和组分隔符。 此选项使您可以选择Oracle NLS设置(默认设置),Microsoft默认区域设置(以提供一种方法来镜像Oracle OLE DB驱动程序的行为以提高互操作性) 或美国数字设置(在使用MS Access或非美国环境中的DAO(数据库访问对象)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM