Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Valor repetido en Select

Estas en el tema de Valor repetido en Select en el foro de SQL Server en Foros del Web. Hola amigos de sql server... lo que tengo no es problema, es una duda que me puede ayudar en algo de performance. Tengo el select: ...
  #1 (permalink)  
Antiguo 25/09/2006, 15:07
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 7 meses
Puntos: 47
Valor repetido en Select

Hola amigos de sql server... lo que tengo no es problema, es una duda que me puede ayudar en algo de performance.

Tengo el select:

Código:
SELECT		
		(SELECT dbo.Cmp_F_getNumCotizaciones(IdEmpresa,IdOficina,IdItem)) as NumCotizaciones,
		(Case when (SELECT dbo.Cmp_F_getNumCotizaciones(IdEmpresa,IdOficina,IdItem)) > 0 Then 'True' Else 'false' End) as chkEliminar
FROM		dbo.Cmp_SolicitudCompra
WHERE		dbo.Cmp_SolicitudCompra.IdEmpresa=@PI_IdEmpresa
AND			dbo.Cmp_SolicitudCompra.IdOficina=@PI_IdOficina
En el que llamo a una función pintada de rojo. Y en la siguiente linea dependiendo del valor que devuelva esa función cambio el valor de true o false del siguiente campo. Para lo que no encuentro otra forma de hacerlo sin llamar nuevamente a la función.

Se puede utilizar el valor que devuelve la función sin tener que llamarla otra vez?

  #2 (permalink)  
Antiguo 28/09/2006, 16:47
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 6 meses
Puntos: 25
Probablemente algo tan simple como:

DECLARE @cotizaciones INT
SELECT @cotizaciones = dbo.Cmp_F_getNumCotizaciones(IdEmpresa,IdOficina,I dItem)

SELECT
@cotizaciones as NumCotizaciones,
(Case when @cotizaciones > 0 Then 'True' Else 'false' End) as chkEliminar
FROM dbo.Cmp_SolicitudCompra
WHERE dbo.Cmp_SolicitudCompra.IdEmpresa=@PI_IdEmpresa
AND dbo.Cmp_SolicitudCompra.IdOficina=@PI_IdOficina
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 28/09/2006, 17:09
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 7 meses
Puntos: 47
No puedo hacer eso porque los parametros IdEmpresa, IdOficina, IdItem como se pueden ver son valores que devuelve el select de la tabla Cmp_SolicitudCompra

Por ello se llaman a esas funciones por cada row que devuelve el select
  #4 (permalink)  
Antiguo 28/09/2006, 17:20
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 6 meses
Puntos: 25
Cierto, caí en la trampa cual ardillita.

En esos casos yo he hecho lo mismo, no he encontrado manera de mejorar ese aspecto fuera de que el desempeño fuera tan malo como para que un cursor lo hiciera más agil (la función tendría que ser muy pesada).
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 28/09/2006, 17:38
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 18 años, 9 meses
Puntos: 0
y que tal si esa columna de "chkEliminar" lo creas en tu aplicacion a medida que vayas mostrando los datos?
  #6 (permalink)  
Antiguo 28/09/2006, 17:43
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 7 meses
Puntos: 47
Bueno pues, lo dejaré así... la idea es evitarme codigo de .net si lo hacía desde el sql server
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:53.