Como se puede hacer este Select

22/06/2006 - 07:01 por Carlos Gómez | Informe spam
De que forma se puede realizar esta consulta (que obviamente esta mal)

SELECT Nombre, dbo.Funcion(Nombre,'Parametro') As LaFuncion
FROM Personas
WHERE LaFuncion > 3 --Esto es lo que obviamente esta mal
ORDER BY LaFuncion

Lo que quiero evitar es evaluar 2 veces la dbo.Funcion -la cual devuelve un
numero- ya que es algo pesada teniendo en cuenta el numero de registros, es
decir: lo siguiente es lo que quiero evitar, pero en definitiva es este el
resultado que deseo:

SELECT Nombre, dbo.Funcion(Nombre,'Parametro') As LaFuncion
FROM Personas
WHERE dbo.Funcion(Nombre,'Parametro') > 3
ORDER BY LaFuncion

Ah, si es posible realizarla sin crear una tabla temporal y demas...
Desde Aguadulce - España
Carlos Gomez
 

Leer las respuestas

#1 J.A. García Barceló
22/06/2006 - 08:32 | Informe spam
SELECT AUX.Nombre, AUX.LaFuncion FROM
(SELECT Nombre, dbo.Funcion(Nombre,'Parametro') As LaFuncion
FROM Personas) AUX
WHERE AUX.LaFuncion>3
ORDER BY AUX.LaFuncion

En cualquier caso, no estoy seguro de si usando la construccion original
(sin subselects) realmente se evalúe la función 2 veces a pesar de que la
pongas dentro de la cláusula Where. Siempre he pensado que el optimizador de
consultas, al ver que es una función, intentaría algo 'inteligente' antes
que evaluarla de nuevo para ver si se cumple la condición. A este respecto,
también yo espero alguna respuesta de alguien más puesto en el tema.

J.A. García Barceló
http://jagbarcelo.blogspot.com/

"Carlos Gómez" escribió en el mensaje
news:
De que forma se puede realizar esta consulta (que obviamente esta mal)

SELECT Nombre, dbo.Funcion(Nombre,'Parametro') As LaFuncion
FROM Personas
WHERE LaFuncion > 3 --Esto es lo que obviamente esta mal
ORDER BY LaFuncion

Lo que quiero evitar es evaluar 2 veces la dbo.Funcion -la cual devuelve
un
numero- ya que es algo pesada teniendo en cuenta el numero de registros,
es
decir: lo siguiente es lo que quiero evitar, pero en definitiva es este el
resultado que deseo:

SELECT Nombre, dbo.Funcion(Nombre,'Parametro') As LaFuncion
FROM Personas
WHERE dbo.Funcion(Nombre,'Parametro') > 3
ORDER BY LaFuncion

Ah, si es posible realizarla sin crear una tabla temporal y demas...
Desde Aguadulce - España
Carlos Gomez

Preguntas similares