2 select en 1 SP

17/08/2005 - 12:16 por Miquel | Informe spam
Hola,
Tengo un SP que hace 2 selects. Uno para una tabla de cabeceras, y otro para
una tabla de detalles. Esto es así, porque debo rellenar con ellos 2
datatables de ado.net.

Al SP se le pasan varios parametros para filtrar las cabeceras.
Lo que yo me pregunto, es si es posible desde dentro del sp, obtener los
registros de la tabla de detalle a partir de los registros filtrados de la
cabecera.

ejemplo:

alter procedure load_registros
@p int = null,
@p1 int = null,
..
@pn = null
as
//primer select: el de cabeceras filtrando
select col1, col2, col3, col4 from tabla where
(@p = null or @p = col1) and (@p1 is null or @p1 = col2)


//segundo select: el de detalles (que debe cumplir los mismos filtros. O
sea, devolver solo el detalle para las cabeceras recuperadas para el primer
select

select det1, det2, det3, det4 from detalles
inner join
(
select col1, col2, col3, col4 from tabla where
(@p = null or @p = col1) and (@p1 is null or @p1 = col2) ) cabecera
on detalle.det1 = cabecera.col1 and detalle.det2 = cabcera.col2

Así es como lo tengo.

Lo que me pregunto, es si hay alguna forma de evitar el tener que volver a
filtrar en el segundo select. Algo como poder, desde el sp, acceder a los
registros seleccionados por el priner select.

Grácias,
Miquel
 

Leer las respuestas

#1 Maxi
17/08/2005 - 13:51 | Informe spam
Hola, nop si lo quieres manejar asi!! otra forma seria hacer un solo Select
en lugar de 2 y saber que cosa va en cada uno o sea, no tener 2 dataset sino
uno por la entidad completa


Salu2
Maxi


"Miquel" escribió en el mensaje
news:
Hola,
Tengo un SP que hace 2 selects. Uno para una tabla de cabeceras, y otro
para
una tabla de detalles. Esto es así, porque debo rellenar con ellos 2
datatables de ado.net.

Al SP se le pasan varios parametros para filtrar las cabeceras.
Lo que yo me pregunto, es si es posible desde dentro del sp, obtener los
registros de la tabla de detalle a partir de los registros filtrados de la
cabecera.

ejemplo:

alter procedure load_registros
@p int = null,
@p1 int = null,
..
@pn = null
as
//primer select: el de cabeceras filtrando
select col1, col2, col3, col4 from tabla where
(@p = null or @p = col1) and (@p1 is null or @p1 = col2)


//segundo select: el de detalles (que debe cumplir los mismos filtros. O
sea, devolver solo el detalle para las cabeceras recuperadas para el
primer
select

select det1, det2, det3, det4 from detalles
inner join
(
select col1, col2, col3, col4 from tabla where
(@p = null or @p = col1) and (@p1 is null or @p1 = col2) ) cabecera
on detalle.det1 = cabecera.col1 and detalle.det2 = cabcera.col2

Así es como lo tengo.

Lo que me pregunto, es si hay alguna forma de evitar el tener que volver a
filtrar en el segundo select. Algo como poder, desde el sp, acceder a los
registros seleccionados por el priner select.

Grácias,
Miquel






Preguntas similares