I think that u can resolve your problem with dynamic cursors
i am sending u an example that i have done to replicate information, try to get all that u need:
CREATE PROC ba_conc_saldos_diarios
@tableowner sysname, -- this is the publisher owner, but we assume its always dbo at subscriber.
@tablename sysname, -- this is the publisher tablename, but we assume its identical at subscriber.
@rowguid uniqueidentifier,
@subscriber sysname,
@subscriber_db sysname,
@log_conflict int OUTPUT, -- output param for if to log conflict for later resolution.
@conflict_message nvarchar(512) OUTPUT -- output param for message to be given about resolution if conflict is loggged.
AS
declare @sqlstr varchar(7000),
@pub_qualified_name varchar(392),
@sub_qualified_name varchar(392),
@empresa varchar(5),
@cuenta decimal(8),
@fcierre datetime,
@finicio datetime,
@ffinal datetime
--sfcierre varchar(20)
declare @mon_salini_sub decimal(15,2),
@mon_salini decimal(15,2),
@mon_salfin decimal(15,2),
@mon_salfin_sub decimal(15,2)
SELECT @pub_qualified_name=QUOTENAME(@subscriber_db)+'.'+QUOTENAME(@tableowner)+'.'+QUOTENAME(@tablename)
SELECT @sub_qualified_name=QUOTENAME(@subscriber_db)+'.'+QUOTENAME(@tableowner)+'.'+QUOTENAME(@tablename)
-- Obtener los datos de Publicador
select @sqlstr = "SELECT SALDO_INI, SALDO_ACT FROM " + @pub_qualified_name + " where ROWGUIDCOL = '" + convert(varchar(36),@rowguid) + "'"
select @sqlstr = "DECLARE lcRepl CURSOR GLOBAL FAST_FORWARD FOR " + @sqlstr
execute ( @sqlstr )
if @@error <> 0 goto FALLO
open lcRepl
fetch next from lcRepl into @mon_salini, @mon_salfin
close lcRepl
deallocate lcRepl
-- Recuperar los datos del Subscriptor
select @sqlstr = 'SELECT * FROM ' + @sub_qualified_name + " where ROWGUIDCOL = '" + convert(varchar(36),@rowguid) + "'"
select @sqlstr = "select COD_EMPRESA, ID_CUENTA, FEC_CIERRE from openquery(" + QUOTENAME(@subscriber) + ',"' + @sqlstr + '"

'
select @sqlstr = 'DECLARE lcReplSaldos CURSOR GLOBAL FAST_FORWARD FOR ' + @sqlstr
execute ( @sqlstr )
if @@error <> 0 goto FALLO
open lcReplSaldos
fetch next from lcReplSaldos into @empresa, @cuenta, @fcierre
close lcReplSaldos
deallocate lcReplSaldos
select @finicio = convert(datetime, convert(char(4), datepart(year, @fcierre)) + "-" + convert(varchar(2), datepart(month, @fcierre)) + "-" + convert(varchar(2),datepart(day, @fcierre)))
select @ffinal = dateadd(day, 1, @finicio)
-- Obtener el Detalle de Movimientos
select @sqlstr = QUOTENAME(@subscriber_db)+'.'+QUOTENAME(@tableowner)+'.'+QUOTENAME(@tablename + '_DESGLOSE')
select @sqlstr = "select * from " + @sqlstr + " where COD_EMPRESA = '" + @empresa + "' and ID_CUENTA = " + convert(varchar(10), @cuenta) + " and FEC_CIERRE >= '" + convert(varchar(30), @finicio) + "' and FEC_CIERRE < '" + convert(varchar(30), @ffinal) + "'"
select @sqlstr = 'select COD_EMPRESA, ID_CUENTA, FEC_CIERRE, sum(SALDO_INI), sum(SALDO_ACT) from openquery(' + QUOTENAME(@subscriber) + ',"' + @sqlstr + '"

group by COD_EMPRESA, ID_CUENTA, FEC_CIERRE'
select @sqlstr = "DECLARE lcReplSaldosDet CURSOR GLOBAL FAST_FORWARD FOR " + @sqlstr
execute ( @sqlstr )
if @@error <> 0 goto FALLO
open lcReplSaldosDet
fetch next from lcReplSaldosDet into @empresa, @cuenta, @fcierre, @mon_salini_sub, @mon_salfin_sub
close lcReplSaldosDet
deallocate lcReplSaldosDet
-- Calcular el Monto de Desfase
select @mon_salini = isnull(@mon_salini,0) + isnull(@mon_salini_sub,0)
select @mon_salfin = isnull(@mon_salfin,0) + isnull(@mon_salfin_sub,0)
select @sqlstr = QUOTENAME(@subscriber_db)+'.'+QUOTENAME(@tableowner)+'.'+QUOTENAME(@tablename + '_DESGLOSE')
select @sqlstr = "delete from [" + @subscriber + "]." + @sqlstr + " where COD_EMPRESA = '" + @empresa + "' and ID_CUENTA = " + convert(varchar(10), @cuenta ) + " and FEC_CIERRE >= '" + convert(varchar(30), @finicio) + "' and FEC_CIERRE < '" + convert(varchar(30), @ffinal) + "'"
execute( @sqlstr )
if @@error <> 0 goto FALLO
-- Devolver el Cursor
SELECT COD_EMPRESA, ID_CUENTA, FEC_CIERRE, @mon_salini, @mon_salfin, @rowguid
FROM BA.BA_SALDOS_DIARIOS
WHERE rowguid=@rowguid
if @@error <> 0 goto FALLO
RETURN 1
FALLO:
raiserror 40001 "Error al realizar la replicacion"
return -1
go