none
Duda con el uso de las Vistas de SQL. RRS feed

  • Pregunta

  • Saludos,

    Tengo una duda con respecto al uso de las vistas.  Tengo en una base de datos un procedimiento almacenado que crea una vista usando 3 tablas.  Al principio del procedimiento almacenado se crea la vista y posteriormente ejecuta otras acciones usando los datos de la vista.  Mi duda es, si ¿La vista que se usa en el procedimiento almacenado debe de actualizarse antes de que se ejecute el mismo? o si ¿se actualiza la vista al ser creada nuevamente al ejecutar el procedimiento?.  Sumando a esto, ¿Cuando se actualizan las vistas? ¿Es automático o se realiza al ejecutar una acción?

    Les agradezco la información que me puedan brindar en este tema.

    ATTE

    Kresnik


    • Editado kresnik viernes, 19 de agosto de 2016 17:28
    viernes, 19 de agosto de 2016 17:28

Respuestas

  • kresnik,

    {!}-  Al principio del procedimiento almacenado se crea la vista y posteriormente ejecuta otras acciones usando los datos de la vista. 

    Entiendo que crear una vista dentro de un procedimiento no es posible, ¿cómo lo estás haciendo? Según lo que describes yo me imagino lo siguiente:

    CREATE PROCEDURE dbo.MiProcedimiento
    AS
    BEGIN
    	CREATE VIEW dbo.MiVista
    	AS
    		SELECT * FROM SomeTable
    
    	SELECT * FROM dbo.MiVista
    END
    GO

    ¿No estarás refiriendo a una tabla temporal o a una CTE? 

    {?}- ¿La vista que se usa en el procedimiento almacenado debe de actualizarse antes de que se ejecute el mismo? o si ¿se actualiza la vista al ser creada nuevamente al ejecutar el procedimiento?.

    Lo que mencionas ahora es distinto, en un procedimiento almacenado se puede hacer uso de una vista como si de una tabla se tratase, las vistas son una abstracción de una consulta de selección, no necesitas actualizar nada, las vistas obtienen los datos de las tablas adyacentes tal y como lo harías con una consulta de selección regular.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta kresnik viernes, 19 de agosto de 2016 18:17
    viernes, 19 de agosto de 2016 17:38
  • Buenas.

    Una vista en realizad es código transac-sql que se ejecuta al realizar la consulta por medio del procedimiento almacenado, por lo que siempre va a devolver información actualizada desde la base de datos, como si se estuviera ejecutando un select directamente en el SP.

    Saludos.

    • Marcado como respuesta kresnik viernes, 19 de agosto de 2016 18:17
    viernes, 19 de agosto de 2016 18:06
  • kresnik,

    Reitero, una vista es una tabla virtual que se define mediante una consulta de selección, la vista no persiste datos -a menos que configures lo contrario-, por tanto, cuando haces referencia a una vista mediante la instrucción FROM la vista retorna los datos de las tablas adyacentes, tal y como lo harías con una consulta de selección, no existe un procedimiento de refresh de vistas o algo parecido.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta kresnik viernes, 19 de agosto de 2016 18:27
    viernes, 19 de agosto de 2016 18:13

Todas las respuestas

  • kresnik,

    {!}-  Al principio del procedimiento almacenado se crea la vista y posteriormente ejecuta otras acciones usando los datos de la vista. 

    Entiendo que crear una vista dentro de un procedimiento no es posible, ¿cómo lo estás haciendo? Según lo que describes yo me imagino lo siguiente:

    CREATE PROCEDURE dbo.MiProcedimiento
    AS
    BEGIN
    	CREATE VIEW dbo.MiVista
    	AS
    		SELECT * FROM SomeTable
    
    	SELECT * FROM dbo.MiVista
    END
    GO

    ¿No estarás refiriendo a una tabla temporal o a una CTE? 

    {?}- ¿La vista que se usa en el procedimiento almacenado debe de actualizarse antes de que se ejecute el mismo? o si ¿se actualiza la vista al ser creada nuevamente al ejecutar el procedimiento?.

    Lo que mencionas ahora es distinto, en un procedimiento almacenado se puede hacer uso de una vista como si de una tabla se tratase, las vistas son una abstracción de una consulta de selección, no necesitas actualizar nada, las vistas obtienen los datos de las tablas adyacentes tal y como lo harías con una consulta de selección regular.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta kresnik viernes, 19 de agosto de 2016 18:17
    viernes, 19 de agosto de 2016 17:38
  • Saludos Williams Morales,

    Gracias por la respuesta.  En realidad es una base de datos que estoy depurando, y como suele suceder, no tenía ninguna documentación, por lo que de hecho tienes razón, más bien es así como indicas, tengo una vista que se crea y posteriormente se usa en un procedimiento almacenado.  Sin embargo en el procedimiento no se actualiza antes de utilizarla, por lo que al correr el procedimiento puede que los datos de la vista no sean los correctos a la hora de ser utilizados por el procedimiento.

    Con la segunda duda, entonces ¿la vista siempre se encuentra actualizada? ¿No habría que ejecutar algún código de actualización de los datos?

    De nuevo gracias por la ayuda!

    ATTE

    Kresnik

    viernes, 19 de agosto de 2016 17:52
  • Buenas.

    Una vista en realizad es código transac-sql que se ejecuta al realizar la consulta por medio del procedimiento almacenado, por lo que siempre va a devolver información actualizada desde la base de datos, como si se estuviera ejecutando un select directamente en el SP.

    Saludos.

    • Marcado como respuesta kresnik viernes, 19 de agosto de 2016 18:17
    viernes, 19 de agosto de 2016 18:06
  • kresnik,

    Reitero, una vista es una tabla virtual que se define mediante una consulta de selección, la vista no persiste datos -a menos que configures lo contrario-, por tanto, cuando haces referencia a una vista mediante la instrucción FROM la vista retorna los datos de las tablas adyacentes, tal y como lo harías con una consulta de selección, no existe un procedimiento de refresh de vistas o algo parecido.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta kresnik viernes, 19 de agosto de 2016 18:27
    viernes, 19 de agosto de 2016 18:13