Exec por cada registro de un select

10/10/2007 - 18:44 por Peni | Informe spam
Me gustaría saber si se puede realizar un exec a un sp por cada uno de
los resultados devueltos por un select, el sp recibiría como parámetros
algunas de las columnas de cada fila de ese select. De momento lo tengo
resuelto con un cursor, pero no me gusta nada esa solución.


=Saludos. Peni.
=

Preguntas similare

Leer las respuestas

#6 Peni
10/10/2007 - 20:49 | Informe spam
Pues si, trabajo con el 2005 (express). No conocía el CROSS APPLY, lo
voy a mirar en los BOL y veré si consigo algo. Si veo que me lío,
volveré a solicitar ayuda :-)

El SP lo que hace es calcular las fechas de vencimiento en base a la
fecha del documento, la forma de pago y los días de pago del cliente.
Con esos datos inserta un registro por cada vencimiento, con su fecha,
importe y documento origen, en la tabla de vencimientos. Intentaré
resolverlo con esa pista, es la mejor forma de aprender ;-)

Muchas gracias

Peni,

Te hice la pregunta para ver si es posible traducir ese procedimiento hacia
una funcion de usuario que devuelva una tabla y uses el nuevo operador CROSS
APPLY, en caso de que estes trabajando con 2005.

select
*
from
(select que comentas en tu mensaje original) as t
CROSS APPLY
dbo.ufn_f1(t.c1, t.c2) as f


AMB

"Peni" wrote:

Es un cálculo de vencimientos y recibos para albaranes, facturas
emitidas y recibidas y ventas directas. Como el código es el mismo para
los cuatro casos lo tengo en un SP. Lo que hago ahora es un select
count de inserted y si es uno solo, selecciono los parámetros con
select top 1 y si son varios registros genero un cursor con todos los
registros añadidos y lo voy recorriendo y llamando al sp en cada fetch.
La verdad es que la mayoría de las veces es un solo registro el que se
inserta, pero mi intención era evitar el uso de cursores en los demás
casos.

Peni,

Puedes decirnos que es lo que hace ese procedimiento almacenado?


AMB

"Peni" wrote:

Me gustaría saber si se puede realizar un exec a un sp por cada uno de
los resultados devueltos por un select, el sp recibiría como parámetros
algunas de las columnas de cada fila de ese select. De momento lo tengo
resuelto con un cursor, pero no me gusta nada esa solución.


=>>>> Saludos. Peni.
=>>>>








=>> Saludos. Peni.
=>>








=Saludos. Peni.
=
Respuesta Responder a este mensaje
#7 Peni
11/10/2007 - 10:50 | Informe spam
Bueno, ya miré lo de CROSS APPLY y conseguí hacerlo funcionar, pero ...
para adaptarlo a lo que yo necesito tengo que cambiar unas cuantas
cosas, ya que veo que desde una función no se pueden hacer insert ni
delete. Creo que lo consiga, pero tendré que dejarlo para más adelante,
ya que por el momento funciona con cursores y tengo que seguir
avanzando.

Muchísimas gracias por tu ayuda :-)

Peni,

Te hice la pregunta para ver si es posible traducir ese procedimiento hacia
una funcion de usuario que devuelva una tabla y uses el nuevo operador CROSS
APPLY, en caso de que estes trabajando con 2005.

select
*
from
(select que comentas en tu mensaje original) as t
CROSS APPLY
dbo.ufn_f1(t.c1, t.c2) as f


AMB

"Peni" wrote:

Es un cálculo de vencimientos y recibos para albaranes, facturas
emitidas y recibidas y ventas directas. Como el código es el mismo para
los cuatro casos lo tengo en un SP. Lo que hago ahora es un select
count de inserted y si es uno solo, selecciono los parámetros con
select top 1 y si son varios registros genero un cursor con todos los
registros añadidos y lo voy recorriendo y llamando al sp en cada fetch.
La verdad es que la mayoría de las veces es un solo registro el que se
inserta, pero mi intención era evitar el uso de cursores en los demás
casos.

Peni,

Puedes decirnos que es lo que hace ese procedimiento almacenado?


AMB

"Peni" wrote:

Me gustaría saber si se puede realizar un exec a un sp por cada uno de
los resultados devueltos por un select, el sp recibiría como parámetros
algunas de las columnas de cada fila de ese select. De momento lo tengo
resuelto con un cursor, pero no me gusta nada esa solución.


=>>>> Saludos. Peni.
=>>>>








=>> Saludos. Peni.
=>>








=Saludos. Peni.
=
Respuesta Responder a este mensaje
#8 Peni
26/10/2007 - 17:47 | Informe spam
Pues al final lo conseguí, me ha costado un riñón pero va de maravilla
:-)). Me he quitado de encima un cursor del trigger y una tabla
temporal del SP, ya que en las functiones no se pueden usar y en vez
del SP ahora tengo 2 funciones.

La cosa queda asi

IF @@ROWCOUNT = 0 RETURN
SET NOCOUNT ON

if exists (SELECT * from Inserted)
BEGIN
delete from VencimientosAlb
where exists (select *
from Inserted
where VencimientosAlb.CodEmpresa = Inserted.CodEmpresa
and
VencimientosAlb.Ejercicio = Inserted.Ejercicio
and
VencimientosAlb.Numero = Inserted.Numero and
VencimientosAlb.Serie = Inserted.Serie)

insert into VencimientosAlb
(CodEmpresa, Ejercicio, Numero, Serie, FechaVenci, NumVenci,
Importe, Descripcion, Pagado, FechaCobro)
(select f.CodEmpresa,
f.Ejercicio,f.Numero,f.Serie,f.FechaVenci,f.NumVenci,
f.Importe,f.Descripcion,f.Pagado,f.FechaCobro
from Inserted as t
CROSS APPLY dbo.CalcVenciAlb(t.CodEmpresa,t.Ejercicio,
t.Numero,t.Serie) as f)
END

SET NOCOUNT OFF

Muchas gracias por la idea :-))


Peni,

Te hice la pregunta para ver si es posible traducir ese procedimiento hacia
una funcion de usuario que devuelva una tabla y uses el nuevo operador CROSS
APPLY, en caso de que estes trabajando con 2005.

select
*
from
(select que comentas en tu mensaje original) as t
CROSS APPLY
dbo.ufn_f1(t.c1, t.c2) as f


AMB

"Peni" wrote:

Es un cálculo de vencimientos y recibos para albaranes, facturas
emitidas y recibidas y ventas directas. Como el código es el mismo para
los cuatro casos lo tengo en un SP. Lo que hago ahora es un select
count de inserted y si es uno solo, selecciono los parámetros con
select top 1 y si son varios registros genero un cursor con todos los
registros añadidos y lo voy recorriendo y llamando al sp en cada fetch.
La verdad es que la mayoría de las veces es un solo registro el que se
inserta, pero mi intención era evitar el uso de cursores en los demás
casos.

Peni,

Puedes decirnos que es lo que hace ese procedimiento almacenado?


AMB

"Peni" wrote:

Me gustaría saber si se puede realizar un exec a un sp por cada uno de
los resultados devueltos por un select, el sp recibiría como parámetros
algunas de las columnas de cada fila de ese select. De momento lo tengo
resuelto con un cursor, pero no me gusta nada esa solución.


=>>>> Saludos. Peni.
=>>>>








=>> Saludos. Peni.
=>>








=Saludos. Peni.
=
Respuesta Responder a este mensaje
#9 Peni
26/10/2007 - 17:55 | Informe spam
Se me olvidaba, la función dbo.CalcVenciAlb devuelve una tabla con
tantos registros como vencimientos tenga un albarán según su forma de
pago y ya va calculado el importe de cada vencimiento y su fecha


=Saludos. Peni.
=
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida