簡體   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