Subconsulta de un sp

12/08/2004 - 09:55 por Xavi | Informe spam
Hola a todos!

Tengo un sp que devuelve un conjunto amplio de registro. Este sp no se puede
modificar en ningún caso puesto que se utiliza muchísimo tal como es.

Me interesaría crear un sp que fuera una subconsulta del resultado de
registros que devuelve el primer sp.

Pongo ejemplo:

CREATE PROCEDURE dbo.Consulta
AS
SELECT * FROM Tabla

Esta consulta sería la "intocable"

Yo querría recuperar algo así ( a nivel sintáctico absolutamente
incorrecto )

CREATE PROCEDURE dbo.Subconsulta
AS
SELECT * FROM "dbo.Consulta"
WHERE Estado = 1

Evidentemente este es un ejemplo estúpido. La realidad es que la primera
consulta es muy compleja. Existe la solución de calcar la consulta original
en la subconsulta pero en ningún caso me gustaría tenerla repetida, pues el
mantenimiento de una implicaría el mantenimiento de la otra.

¿Hay alguna idea?

Mil gracias


Xavi

Preguntas similare

Leer las respuestas

#6 Xavi
13/08/2004 - 11:39 | Informe spam
Espectacular!

Y encima pides disculpas por no haber respondido antes Muchas gracias
:) Es justo lo que necesitaba.

Esto ha sido de 9,9. Para el 10 faltaría que el segundo sp no dependiera de
la estructura de datos retornada por el primer sp. Es decir ... que
modificar el primer sp no implicara modificar la instrucción CREATE TABLE #t
del segundo. De todas maneras, realmente útil. De momento será así!

Xavi


"Carlos Sacristan" <csacristan ARROBA mvps.org> escribió en el mensaje
news:
Perdona por no haberte respondido antes...

Revisa el ejemplo que he creado que simula lo que necesitas:

***************************************
USE northwind
GO
tocar
CREATE PROCEDURE dbo.pa_dameOrders as
SELECT orderid,customerid FROM orders
GO


los
datos que devuelve el procedimiento anterior
CREATE PROCEDURE dbo.pa_dameTrocitoOrders as
CREATE TABLE #t (o int, c varchar(10))
INSERT #t
EXEC dbo.pa_dameOrders

SELECT * FROM #t WHERE o > 10500
GO

EXECUTE dbo.pa_dameTrocitoOrders

***************************************


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Xavi" escribió en el mensaje
news:#HPn$
> En primer lugar, gracias por contestar.
>
> Pero ... ¿Cómo puedo guardar el resultado de un sp en una tabla


temporal?
> ¿La tabla temporal quién la crearía? Ten en cuenta que el primer sp


tiene
> que devolver un conjunto de registro y hay no hay nada que negociar.
>
> ¿Podrías exlicar un poco más tu idea, por favor?.
>
> Mil gracias
>
>
> Xavi
>
>
> "Carlos Sacristan" <csacristan ARROBA mvps.org> escribió en el mensaje
> news:
> > El resultado de un procedimiento lo puedes grabar en una tabla
> temporal
> > previamente creada y filtrar los resultados a partir de los datos de
ésta
> >
> >
> > Un saludo
> >
> > -
> > "Sólo sé que no sé nada. " (Sócrates)
> >
> > Por favor, responder únicamente al foro
> > Se agradece la inclusión de sentencias DDL
> >
> >
> > "Xavi" escribió en el mensaje
> > news:
> > > Hola a todos!
> > >
> > > Tengo un sp que devuelve un conjunto amplio de registro. Este sp no


se
> > puede
> > > modificar en ningún caso puesto que se utiliza muchísimo tal como


es.
> > >
> > > Me interesaría crear un sp que fuera una subconsulta del resultado


de
> > > registros que devuelve el primer sp.
> > >
> > > Pongo ejemplo:
> > >
> > > CREATE PROCEDURE dbo.Consulta
> > > AS
> > > SELECT * FROM Tabla
> > >
> > > Esta consulta sería la "intocable"
> > >
> > > Yo querría recuperar algo así ( a nivel sintáctico absolutamente
> > > incorrecto )
> > >
> > > CREATE PROCEDURE dbo.Subconsulta
> > > AS
> > > SELECT * FROM "dbo.Consulta"
> > > WHERE Estado = 1
> > >
> > > Evidentemente este es un ejemplo estúpido. La realidad es que la
primera
> > > consulta es muy compleja. Existe la solución de calcar la consulta
> > original
> > > en la subconsulta pero en ningún caso me gustaría tenerla repetida,
pues
> > el
> > > mantenimiento de una implicaría el mantenimiento de la otra.
> > >
> > > ¿Hay alguna idea?
> > >
> > > Mil gracias
> > >
> > >
> > > Xavi
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Carlos Sacristan
13/08/2004 - 11:56 | Informe spam
Bueno, me alegro de que te sirva (pero la nota que dices no es para
tanto, en serio) :-)

Lo que pides es bastante complicado. Es más, creo que cuesta más el
collar que el perro; así, sin pensarlo mucho, se hace prácticamente
obligatorio el uso de sql dinámico (que si es posible evitarlo, mejor). Pero
es que además, si se modifica un objeto de forma que su diseño cambia, hay
que tener en cuenta los objetos que dependen de él y también la aplicación
cliente que los usa.

Supongamos que conseguimos lo que dices: hemos estado un tiempo
dedicando un esfuerzo para no tener que buscar los objetos que dependen unos
de otros y tener que modificarlos (si fuera necesario). ¿Cuántas veces se va
a modificar el primero? ¿Se amortizaría el tiempo empleado en lograr la
solución que indicas? No conozco tu situación, pero no creo que mereciera la
pena...


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Xavi" escribió en el mensaje
news:
Espectacular!

Y encima pides disculpas por no haber respondido antes Muchas gracias
:) Es justo lo que necesitaba.

Esto ha sido de 9,9. Para el 10 faltaría que el segundo sp no dependiera


de
la estructura de datos retornada por el primer sp. Es decir ... que
modificar el primer sp no implicara modificar la instrucción CREATE TABLE


#t
del segundo. De todas maneras, realmente útil. De momento será así!

Xavi


"Carlos Sacristan" <csacristan ARROBA mvps.org> escribió en el mensaje
news:
> Perdona por no haberte respondido antes...
>
> Revisa el ejemplo que he creado que simula lo que necesitas:
>
> ***************************************
> USE northwind
> GO
> tocar
> CREATE PROCEDURE dbo.pa_dameOrders as
> SELECT orderid,customerid FROM orders
> GO
los
> datos que devuelve el procedimiento anterior
> CREATE PROCEDURE dbo.pa_dameTrocitoOrders as
> CREATE TABLE #t (o int, c varchar(10))
> INSERT #t
> EXEC dbo.pa_dameOrders
>
> SELECT * FROM #t WHERE o > 10500
> GO
>
> EXECUTE dbo.pa_dameTrocitoOrders
>
> ***************************************
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> Por favor, responder únicamente al foro
> Se agradece la inclusión de sentencias DDL
>
>
> "Xavi" escribió en el mensaje
> news:#HPn$
> > En primer lugar, gracias por contestar.
> >
> > Pero ... ¿Cómo puedo guardar el resultado de un sp en una tabla
temporal?
> > ¿La tabla temporal quién la crearía? Ten en cuenta que el primer sp
tiene
> > que devolver un conjunto de registro y hay no hay nada que negociar.
> >
> > ¿Podrías exlicar un poco más tu idea, por favor?.
> >
> > Mil gracias
> >
> >
> > Xavi
> >
> >
> > "Carlos Sacristan" <csacristan ARROBA mvps.org> escribió en el mensaje
> > news:
> > > El resultado de un procedimiento lo puedes grabar en una tabla
> > temporal
> > > previamente creada y filtrar los resultados a partir de los datos de
> ésta
> > >
> > >
> > > Un saludo
> > >
> > > -
> > > "Sólo sé que no sé nada. " (Sócrates)
> > >
> > > Por favor, responder únicamente al foro
> > > Se agradece la inclusión de sentencias DDL
> > >
> > >
> > > "Xavi" escribió en el mensaje
> > > news:
> > > > Hola a todos!
> > > >
> > > > Tengo un sp que devuelve un conjunto amplio de registro. Este sp


no
se
> > > puede
> > > > modificar en ningún caso puesto que se utiliza muchísimo tal como
es.
> > > >
> > > > Me interesaría crear un sp que fuera una subconsulta del resultado
de
> > > > registros que devuelve el primer sp.
> > > >
> > > > Pongo ejemplo:
> > > >
> > > > CREATE PROCEDURE dbo.Consulta
> > > > AS
> > > > SELECT * FROM Tabla
> > > >
> > > > Esta consulta sería la "intocable"
> > > >
> > > > Yo querría recuperar algo así ( a nivel sintáctico absolutamente
> > > > incorrecto )
> > > >
> > > > CREATE PROCEDURE dbo.Subconsulta
> > > > AS
> > > > SELECT * FROM "dbo.Consulta"
> > > > WHERE Estado = 1
> > > >
> > > > Evidentemente este es un ejemplo estúpido. La realidad es que la
> primera
> > > > consulta es muy compleja. Existe la solución de calcar la consulta
> > > original
> > > > en la subconsulta pero en ningún caso me gustaría tenerla


repetida,
> pues
> > > el
> > > > mantenimiento de una implicaría el mantenimiento de la otra.
> > > >
> > > > ¿Hay alguna idea?
> > > >
> > > > Mil gracias
> > > >
> > > >
> > > > Xavi
> > > >
> > > >
> > >
> > >
> >
> >
>
>


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