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

Programación avanzada en Funciones

Estas en el tema de Programación avanzada en Funciones en el foro de SQL Server en Foros del Web. Hola amigos, tengo un problemilla... la cosa es que yo tengo un select, y en dicho select estoy llamando a una función, algo así: SELECT ...
  #1 (permalink)  
Antiguo 09/03/2007, 12:21
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Programación avanzada en Funciones

Hola amigos, tengo un problemilla... la cosa es que yo tengo un select, y en dicho select estoy llamando a una función, algo así:

SELECT
Campo1,
Campo2,
Funcion(Campo3,Campo4)
FROM
Tabla

Y En la funcion tengo un select que me devuelve varios registros con valores numéricos, los cuales los quisiera retornar en un campo varchar separados por comas: "1,3,8,78,61" Para lo cual necesitaría insertar los registros del select en una tabla temporal, luego barrerme la tabla temporal e ir concatenando cada registro en una variable varchar para retornar dicha variable. La cosa es que en la función me sale error si creo tablas temporales, en tal caso pudiera crear un procedimiento que devuelva lo que necesito, puedo llamar en el select principal a un procedimiento en vez de a la función como lo estoy tratando de hacer
  #2 (permalink)  
Antiguo 11/03/2007, 12:01
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Programación avanzada en Funciones

Prueba crear variables de tablas. No recuerdo la sintaxis exacta, pero es más o menos esto:

DECLARE @tabla(a int, b int) TABLE

Por otro lado, ten en cuenta que lo que estás haciendo es prácticamente un cursor. Cada renglón ejecutará un select, piensa la carga que existe en una tabla con 15,000 registros.

¿Has evaluado la posibilidad de usar una función que te regrese una tabla? De manera que uses algo como:

SELECT
Campo1,
Campo2,
F.resultado
FROM
Tabla T
INNER JOIN Funcion(Campo3,Campo4) F
ON ....

Resultaría en una ejecución más eficiente.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 13/03/2007, 13:21
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Re: Programación avanzada en Funciones

Ups!!! al parecer algo le paso al ajax que no se publicó lo que había escrito aquí.

En resumen, hicimos un procedimiento en el que podemos crear tablas temporales y toda la nota... Ahora, en vez de una función se puede llamar a un procedimiento en el select?

Los datos pueden ser muchos, por lo que el join que comentas pudiera resultar algo pesado, primero trataría de evaluar otras alternativas como lo del procedimiento
  #4 (permalink)  
Antiguo 13/03/2007, 21:55
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Programación avanzada en Funciones

No, no puedes llamar SPs en medio de un SELECT.

Por otro lado, creeme que sería mucho más ligero una función de tabla que una función de escalar (en caso de que efectivamente, la puedas migrar a una de tabla).

Suerte
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 14/03/2007, 13:19
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Re: Programación avanzada en Funciones

Gracias por la recomendación Mith
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 16:40.