SQL Server Performance

Reutilizacion de valores de funciones en select

Discussion in 'Preguntas sobre SQL Server en Español.' started by jmedgar2000, Dec 15, 2006.

  1. jmedgar2000 New Member

    Es posible reutilizar el valor devuelto por una funcion en una sentencia de selecion sin usar de nuevo la misma funcion en dado caso de que necesite este valor para otros calculos

    Creo que la pregunta es clara, pero para ilustrarlo mejor alli un ejemplo:
    select
    dbo.FuncionX(Valo_Coti,1000),
    dbo.FuncionY(dbo.FuncionX(Valo_Coti,1000))
    from cotizacion

    Este caso es muy similar o igual al caso en que se declara una variable y en el select se le asigna un valore y alli mismo se intenta recuperar el valor de las variables. Obviamente no se puee entender un select como si de un ciclo se tratase.

    Creo que lo normal es usar un cursor para hacer esto, pero el presente ejemplo es muy sencillo y aplicarlo a la situacion real resultara sumamente lento de ejecutar por el diseño de las tablas y o quiero saber si ahy otra forma que no sea por cursores.

    Ayudaria mucho que el TSQL tuviera caracteristicas de los lenguajes de programacion para aplicaciones para caclular el valor de una vez y usarlo para el procesamiento posterior en otros lados. No se si con el C embebido o ahora con las caracteristicas de ADO.Net y SQL Server 2005 haya mas cohesion entre el tipo de codigo para programar aplicaciones y el de base de datos, tal como lo maneja FoxPro.
  2. Luis Martin Moderator

    Las mismas consideraciones que el otro post.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    All in Love is Fair
    Stevie Wonder


    All postings are provided “AS IS” with no warranties for accuracy.



  3. Luis Martin Moderator

    No creo que puedas nestear funciones. Puedes asignar un valor devuelto por una función a la variable y usar esa variable en la función.

    Example:



    Declare @i bigint
    select Top 1 @i=
    dbo.FuncionX(Valo_Coti,1000),
    from cotizacion

    select
    dbo.FuncionY(@i)
    from cotizacion


    Madhivanan





    Luis Martin
    Moderator
    SQL-Server-Performance.com

    All in Love is Fair
    Stevie Wonder


    All postings are provided “AS IS” with no warranties for accuracy.



  4. Luis Martin Moderator

    O mejor,

    select X, dbo.FuncionY(x, 1000)
    FROM
    (select
    dbo.FuncionX(Valo_Coti,1000) as X
    from cotizacion) T




    Luis Martin
    Moderator
    SQL-Server-Performance.com

    All in Love is Fair
    Stevie Wonder


    All postings are provided “AS IS” with no warranties for accuracy.



Share This Page