Endelig opsporet et par løsninger - nøglen til problemet (for os) er, at RPC'er som standard er deaktiveret for sammenkædede servere. Parametrene for Rpc, Rpc Out og Use Remote Collation skal indstilles til sand. Mere info:
Den løsning, du bruger, afhænger af procedurens outputkrav. Det første eksempel returnerer en outputværdi. Det andet eksempel returneres ingen outputværdier (data indsamles i en efterfølgende forespørgsel).
Eksempel 1
Proceduren T2T_collect_all har to inputparametre (start- og slutdatoer) og en outputparameter (rækkeantal).
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
EXECUTE ( 'begynd 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;
Flere oplysninger:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
Eksempel 2a
Proceduren T2T_collect_allx har kun to inputparametre (start- og slutdatoer).
EXECUTE ('begynd T2T_collect_allx (SYSDATE - 40, SYSDATE); slut;') ORA_DB;
Eksempel 2b
VÆLG * FRA OPENQUERY(ORA_DB, 'begynd T2T_collect_allx (SYSDATE - 40, SYSDATE ); slut;')