2013-01-28 11 views
5

Stavo usando OpenQuery Per ottenere il set di righe dalla tabella Oracle nel mio SQL Server. Poi trovo che c'è qualcosa di conosciuto come OPENROWSET per recuperare tutte le righeServer collegato SQL a Oracle Openquery recupera una riga singola

ma non ha funzionato per me.

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

Errore: -

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)". 

Nome di Mio DSN: INDIANBANK

ho usato Microsoft OLE DB per driver ODBC Creare server collegato per connettersi a Oracle (ORACLE DB È SITUATO SU SERVER REMOTO)

My DSN Show Test Connection Suc ceeded. Come per My Linked Server.

Quando eseguo seguente query Select * From openquery(IndianBank,'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS')Si recuperare solo una riga

mio codice server collegato: -

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 
+0

Il testo è un po 'confuso (almeno per me), si desidera ottenere dati da Oracle a mssql o in altro modo? – YvesR

+0

@YvesR ottiene i dati da Oracle (server remoto) a mssql ... quindi ho creato il server collegato – Shaggy

+0

Non sono mai riuscito a ottenere i dati da Oracle senza installare il client Oracle. Dopo aver creato una connessione per configurare TNSNAME. Poi sono stato in grado di accedere tramite ms sql, script, ecc. Il driver Oracle Oracle di Oracle fornito con il sistema non funziona correttamente per quanto ne so, quindi hai provato l'altro modo che ho descritto? – YvesR

risposta

5

Se è stata utilizzata la stringa come questo " 'MSDASQL', 'DRIVER = { SQL Server}; SERVER = INDIANBANK; UID = ags; PWD = mypass ',' Seleziona * Da ATM_PROGNOSIS.IR_ATMMON_AGS '"hai una connessione senza DSN, quindi i test del DSN sono inutili.

vi consiglio di prendere questo driver
Oracle Data Provider for .NET
E 'molto più amichevole con Oracle.

Ecco
the example for ODP.NET
in cui viene descritta la sintonizzazione.

E qui è the full docs for ODP.NET

Spero che questo aiuti :)

Vedere i miei commenti qui sotto.

P.S. Per il driver Microsoft i parametri sono mostrati qui Microsoft OLE DB Provider for ODBC

+0

Se modifico la mia query per includere DSN 'SELECT a . * DA OPENROWSET ('MSDASQL', 'DSN = INDIANBANK; SERVER = INDIANBANK; UID = ags; PWD = mypass', 'Seleziona * Da ATM_PROGNOSIS.IR_ATMMON_AGS') COME ottengo solo 1 riga ma totale lì sono 5 – Shaggy

+0

Ho già "Provider Oracle per OLE DB 11.2.0.3.0" installato sul mio sistema. Come posso incorporarlo nella mia query 'Select'? – Shaggy

+0

Per l'installazione di ODAC, l'istruzione è qui -> (http://www.oracle.com/technetwork/topics/dotnet/downloads/install112030-1440546.html). Query sarà come "da openrowset ('MSDAORA.1', 'INDIANBANK'; 'ags'; 'mypass', 'Seleziona * Da ATM_PROGNOSIS.IR_ATMMON_AGS')" – knagaev

0

La mia soluzione dello stesso problema era

parametro

impostare le impostazioni numeriche a US numerico nel impostazioni del driver Oracle ODBC.

Citazione da ODBC aiuto, roba problematica è sottolineata) Impostazioni numerici - Consente di scegliere quali impostazioni numerici verranno utilizzati per determinare i caratteri separatori decimali e di gruppo per la ricezione e la restituzione dei dati numerici che è destinato come stringhe. Questa opzione consente di scegliere le impostazioni di Oracle NLS (impostazione predefinita), le impostazioni internazionali predefinite di Microsoft (per specificare il comportamento del driver Oracle OLE DB per una maggiore interoperabilità), o le impostazioni numeriche statunitensi (necessarie quando si utilizza MS Access o DAO (Database Access Objects) in ambienti non statunitensi).

Problemi correlati