none
Vistas o funciones

    Question

  • Hola a todos

    Ayer en una conversación se generó una duda que aún no puedo resolver con respecto a si es mas conveniente utilizar vistas o funciones, por ejemplo

    si tengo la siguiente función

    ALTER

     

    function [dbo].[FX_F1] ( @codigo int)

    returns

     

    table

    as

    return

    (

    select t1.campo1, t1.campo2,t2.campo1, t2.campo3

    from t1 inner join t2 on t1.codigo=t2.codigo

    where t1.codigo=@codigo

    )

    código de la vista

    CREATE VIEW VW_F1 AS

    select t1.codigo, t1.campo1, t1.campo2,t2.campo1, t2.campo3

    from t1 inner join t2 on t1.codigo=t2.codigo

    y finalmente tengo la consulta que debo analizar

    implementación original utilizando funciones

    Select t3.campo1, t3.campo2, t.campo1, t.campo3

    from t3 inner join FX_F1(t3.codigo) as t on t3.campo1=t.campo1

    segunda implementación con vistas

    Select t3.campo1, t3.campo2, t.campo1, t.campo3

    from t3 inner join VW_F1(t3.codigo) as t

    on t.codigo=t3.codigo and t.campo1=t3.campo1

    Agradecería sus comentarios al respecto y si tienen alguna idea de como medirlo ya que los planes de ejecución al evaluar funciones los separa y no se como interprepartlo

    Wednesday, February 09, 2011 12:37 PM

Answers

  • Hola,

    En mi opinión personal, creo que lo que te conviene utilizar es una vista en este caso. Digo esto porque no estas realizando calculos ni nada por el estilo, sino simplemente retornando el resultado de una consulta.

    Si lo que necesitas es retornar un resultado entendible, puedes crear una vista con alias, por ejemplo:

     

    Create View prueba

    As

    Select campo1 as Nombre, campo2 as Apellido
    From Tabla

     

    Espero que te sirva la opinión.


    Willy Taveras.-
    República Dominicana


    IT Learn - Learning Together

    Wednesday, February 09, 2011 12:51 PM
    Moderator
  • Hola.

    Las funciones definidas por el usuario de MicrosoftSQL Server son rutinas que aceptan parámetros, realizan una acción, como un cálculo complejo, y devuelven el resultado de esa acción que puede ser un valor escalar único o un conjunto de resultados. Estas funciones se almacenan como objetos de base de datos que proporcionan código reutilizable. Se pueden invocar en consultas o en otras instrucciones o expresiones, como columnas calculadas o expresiones de cadena...

    Ahora bien. las funciones no son visibles en los planes de ejecución, su codigo se interpreta en cada llamada.

    Mi recomendación es que hagas un procedimiento almacenado, que no use, ni tenga funciones en su cuerpo y que devuelva lo que deseas. De esta forma tendras el plan de ejecución para todas las ejecuciones que hagas, más si se va ha usar muy frecuentemente.


    Norman M. Pardell ||Microsoft Certified IT Professional|| Database Administrator. Database Developer. SQL Server 2008
    Wednesday, February 09, 2011 1:33 PM

All replies

  • Hola,

    En mi opinión personal, creo que lo que te conviene utilizar es una vista en este caso. Digo esto porque no estas realizando calculos ni nada por el estilo, sino simplemente retornando el resultado de una consulta.

    Si lo que necesitas es retornar un resultado entendible, puedes crear una vista con alias, por ejemplo:

     

    Create View prueba

    As

    Select campo1 as Nombre, campo2 as Apellido
    From Tabla

     

    Espero que te sirva la opinión.


    Willy Taveras.-
    República Dominicana


    IT Learn - Learning Together

    Wednesday, February 09, 2011 12:51 PM
    Moderator
  • Hola.

    Las funciones definidas por el usuario de MicrosoftSQL Server son rutinas que aceptan parámetros, realizan una acción, como un cálculo complejo, y devuelven el resultado de esa acción que puede ser un valor escalar único o un conjunto de resultados. Estas funciones se almacenan como objetos de base de datos que proporcionan código reutilizable. Se pueden invocar en consultas o en otras instrucciones o expresiones, como columnas calculadas o expresiones de cadena...

    Ahora bien. las funciones no son visibles en los planes de ejecución, su codigo se interpreta en cada llamada.

    Mi recomendación es que hagas un procedimiento almacenado, que no use, ni tenga funciones en su cuerpo y que devuelva lo que deseas. De esta forma tendras el plan de ejecución para todas las ejecuciones que hagas, más si se va ha usar muy frecuentemente.


    Norman M. Pardell ||Microsoft Certified IT Professional|| Database Administrator. Database Developer. SQL Server 2008
    Wednesday, February 09, 2011 1:33 PM