Consulta compleja

30/11/2009 - 17:51 por José Antonio Muñoz | Informe spam
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su vez
por cada registro una subconsulta que es a su vez el contenido de uno de los
campos de la tabla? No se si me he explicado bien pero con un ejemplo yo
creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como texto
en un campo de la tabla.

saludos,
José Antonio Muñoz

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
30/11/2009 - 18:07 | Informe spam
Básicamente, lo que pides es imposible.

Lo que pides es igual que el cambiar la consulta según el registro en que se
encuentre en ese momento la devolución del conjunto de resultados...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"José Antonio Muñoz" wrote in message
news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su
vez por cada registro una subconsulta que es a su vez el contenido de uno
de los campos de la tabla? No se si me he explicado bien pero con un
ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como texto
en un campo de la tabla.

saludos,
José Antonio Muñoz

Respuesta Responder a este mensaje
#2 José Antonio Muñoz
30/11/2009 - 18:29 | Informe spam
¿He intentado crear una función x que obtiene como parámetro el texto de la
consulta (sql) contenida en el campo y que retorna valores de tabla pero no
permite la ejecución de la instrucción sp_ejecutesql @sql o simplemente
EXECUTE (@sql) ?

¿Se puede ejecutar un procedimiento almacenado desde un SELECT? Tengo
entendido que los procedimientos almacenados admiten la instrucción exec
sp_executesql.

José Antonio Muñoz

"Carlos Sacristan" escribió en el mensaje de noticias
news:ullfl%
Básicamente, lo que pides es imposible.

Lo que pides es igual que el cambiar la consulta según el registro en que
se encuentre en ese momento la devolución del conjunto de resultados...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"José Antonio Muñoz" wrote in message
news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su
vez por cada registro una subconsulta que es a su vez el contenido de uno
de los campos de la tabla? No se si me he explicado bien pero con un
ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como
texto en un campo de la tabla.

saludos,
José Antonio Muñoz




Respuesta Responder a este mensaje
#3 Carlos Sacristan
30/11/2009 - 18:50 | Informe spam
Es que no hay forma de conseguir eso. Tendrías que construir la instrucción
de forma dinámica y unirlas con UNION. Es decir (en pseudo-pseudo-código)

<abrir cursor>
<por cada iteración>
<recoger la instrucción sql almacenada en el campo correspondiente>
<coger la query inicial y añadirle la instrucción sql recogida en el
punto anterior>
<añadir UNION>
<cerrar cursor>
<ejecutar query dinámicamente>

Al final, lo que tendrías que tener es algo como

SELECT Codigo, Descripcion,
(query1) As Contador
FROM Tabla
UNION
SELECT Codigo, Descripcion,
(query2) As Contador
FROM Tabla
UNION
SELECT Codigo, Descripcion,
(query3) As Contador
FROM Tabla
...

Obviamente, la consulta almacenada de ese campo debería devolver siempre un
único campo y del mismo tipo.

También te puedes imaginar las implicaciones a nivel de rendimiento que esto
tiene, además de la complejidad de mantener algo así. Por no hablar de las
implicaciones a nivel de seguridad...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"José Antonio Muñoz" wrote in message
news:
¿He intentado crear una función x que obtiene como parámetro el texto de
la consulta (sql) contenida en el campo y que retorna valores de tabla
pero no permite la ejecución de la instrucción sp_ejecutesql @sql o
simplemente EXECUTE (@sql) ?

¿Se puede ejecutar un procedimiento almacenado desde un SELECT? Tengo
entendido que los procedimientos almacenados admiten la instrucción exec
sp_executesql.

José Antonio Muñoz

"Carlos Sacristan" escribió en el mensaje de noticias
news:ullfl%
Básicamente, lo que pides es imposible.

Lo que pides es igual que el cambiar la consulta según el registro en que
se encuentre en ese momento la devolución del conjunto de resultados...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"José Antonio Muñoz" wrote in message
news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su
vez por cada registro una subconsulta que es a su vez el contenido de
uno de los campos de la tabla? No se si me he explicado bien pero con un
ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como
texto en un campo de la tabla.

saludos,
José Antonio Muñoz







Respuesta Responder a este mensaje
#4 Juan Carlos Leguizamon
30/11/2009 - 22:53 | Informe spam
Esas "consultas SELECT que se encuentran archivadas como texto en un campo
de la tabla" cuales son, nos podrias dar algunos ejemplos? creo que se
necesita un cambio de filosofia ...

"José Antonio Muñoz" escribió en el mensaje
news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su
vez por cada registro una subconsulta que es a su vez el contenido de uno
de los campos de la tabla? No se si me he explicado bien pero con un
ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como texto
en un campo de la tabla.

saludos,
José Antonio Muñoz

Respuesta Responder a este mensaje
#5 José Antonio Muñoz
01/12/2009 - 08:56 | Informe spam
Algunas de ellas son:

1.- SELECT Codigo, Nombre, Fecha_Visita FROM Tabla1 WHERE Fecha_Visita Is
Null
2.- SELECT Codigo, Nombre, Fecha_Salida FROM Tabla2 WHERE Salida=1 And
(SELECT TOP 1 1 FROM Tabla3 INNER JOIN Tabla4 ON Tabla3.EnfInf=Tala4.Codigo
WHERE Codigo=Tabla1.Control And Tipo=1) Is Null

Estas consultas están archivadas como texto en un campo de una tabla
principal y se utilizan como control de calidad de los datos que están
archivados en otras tablas. Es decir, el usuario, a través de un aplicativo,
consulta primero la cantidad de registros que devuelve cada una de estas
consultas y sus porcentajes correspondientes en función del total de
registros de cada tabla para saber si los datos almacenados superan un
determinado control de calidad. Si al ejecutar alguna de estas consultas no
se supera el control de calidad se ejecutan otras consultas, que también
están almacenadas en otro campo para actualizar esos datos en función de
determinadas condiciones.

No se si me he explicado bien. La tabla principal tiene tantos registros
como controles de calidad se necesitan para la base de datos (en total
pueden existir más de 80 controles de calidad) y cada registro de esta tabla
puede contener consultas de controles (SELECT ...) más o menos complejas y a
su vez consultas de actualización (UPDATE ...) también más o menos
complejas. El usuario cuando observa la lista de controles de calidad con
sus porcentajes decide que control de calidad supera o cual no para poder
ejecutar las correspondientes actualizaciones automáticas.

saludos,
José Antonio Muñoz.

"Juan Carlos Leguizamon" escribió en el
mensaje de noticias news:%
Esas "consultas SELECT que se encuentran archivadas como texto en un campo
de la tabla" cuales son, nos podrias dar algunos ejemplos? creo que se
necesita un cambio de filosofia ...

"José Antonio Muñoz" escribió en el mensaje
news:
Hola a todos,

¿como puedo diseñar una consulta (SELECT) de una tabla que ejecute a su
vez por cada registro una subconsulta que es a su vez el contenido de uno
de los campos de la tabla? No se si me he explicado bien pero con un
ejemplo yo creo que estará claro:

SELECT
Codigo,
Descripcion,
(SELECT Count(*) FROM (xx) As Sql) As Contador
FROM
Tabla

donde xx es una consulta SELECT ..., que se encuentra archivada como
texto en un campo de la tabla.

saludos,
José Antonio Muñoz





Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida