Slutligen hittade några lösningar – nyckeln till problemet (för oss) är att RPC:er som standard är inaktiverade för länkade servrar. Parametrarna för Rpc, Rpc Out och Use Remote Collation måste ställas in på sant. Mer information:
Vilken lösning du använder beror på förfarandets utdatakrav. Det första exemplet returnerar ett utdatavärde. Det andra exemplet returneras inga utdatavärden (data samlas in i en efterföljande fråga).
Exempel 1
Proceduren T2T_collect_all har två indataparametrar (start- och slutdatum) och en utdataparameter (radantal).
DECLARE @l_i_parameter1 varchar(10)
DECLARE @l_i_parameter2 varchar(10)
DECLARE @l_i_parameter3 varchar(10)
DECLARE @l_i_parameter4 varchar(10)
DECLARE @l_o_parameter1 heltal
SET @l_i_parameter1 ='2009/10/01'
SET @l_i_parameter2 ='åååå/mm/dd'
SET @l_i_parameter3 ='2009/12/31'
SET @l_i_parameter4 ='åååå/mm/dd'
SET @l_o_parameter1 =0
UTFÖR ( 'begynna T2T_collect_all(to_date(?, ?), to_date(?, ?), ? ); end;',
@l_i_parameter1,
@l_i_parameter2,
@l_i_parameter3,
@l_i_parameter4,
@l_o_parameter1 OUTPUT
) PÅ ORA_DB;
Mer information:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
Exempel 2a
Proceduren T2T_collect_allx har bara två inmatningsparametrar (start- och slutdatum).
UTFÖR ('börja T2T_collect_allx (SYSDATE - 40, SYSDATE); slut;') ORA_DB;
Exempel 2b
SELECT * FROM OPENQUERY(ORA_DB, 'begin T2T_collect_allx (SYSDATE - 40, SYSDATE ); end;')