140 votos

¿Cuál es la diferencia entre un procedimiento almacenado y una vista?

Estoy confundido sobre algunos puntos:

  1. ¿Cuál es la diferencia entre un procedimiento almacenado y una vista?

  2. ¿Cuándo debo usar procedimientos almacenados y cuándo debo usar vistas en Sql Server?

  3. ¿Permiten las vistas la creación de consultas dinámicas en las que podamos pasar parámetros?

  4. ¿Cuál es el más rápido, y en qué se basa para que uno sea más rápido que el otro?

  5. ¿Las vistas o los procedimientos almacenados asignan memoria permanentemente?

  6. ¿Qué significa si alguien dice que las vistas crean una tabla virtual, mientras que los procedimientos crean una tabla de materiales?

Por favor, infórmeme sobre más puntos, si los hay.

146voto

dozedoff Puntos 296

Una vista representa un virtual mesa. Puede unir varias tablas en una vista y utilizarla para presentar los datos como si procedieran de una sola tabla.

Un procedimiento almacenado utiliza parámetros para realizar una función... ya sea actualizar e insertar datos, o devolver valores individuales o conjuntos de datos.

¿Debo utilizar una vista, un procedimiento almacenado o un UDF? - contiene una buena información para ayudar a entender cuáles son las diferencias.

Digamos que tengo dos mesas:

tbl_user Columnas: .user_id, .user_name, .user_pw

tbl_perfil Columnas: .profile_id, .user_id .profile_description

Así que si me encuentro consultando desde esas tablas MUCHO... en lugar de hacer la unión en CADA pedazo de sql definiría una vista como:

CREATE View vw_user_profile
AS
  Select A.user_id, B.profile_description
  FROM tbl_user A left join tbl_profile B on A.user_id = b.user_id
GO

Así que en el futuro si quiero consultar profile_description por ID de usuario... todo lo que tengo que hacer es

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

Ese código podría ser utilizado en un procedimiento almacenado como:

create procedure dbo.getDesc
 @ID int
AS
begin
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO

Así que más tarde puedo llamar

dbo.getDesc 25

y obtendré la descripción para el usuario id 25. donde el 25 es su parámetro.

Obviamente, hay muchos más detalles, pero esta es sólo la idea básica.

107voto

cusimar9 Puntos 2540

Hay mucha información disponible en la web

http://bytes.com/topic/sql-server/answers/450173-views-vs-stored-procedures-whats-difference

Aquí hay un buen resumen:

Un procedimiento almacenado:

  • acepta parámetros
  • NO puede utilizarse como bloque de construcción en una consulta más amplia
  • puede contener varias sentencias, bucles, IF ELSE, etc.
  • puede realizar modificaciones en una o varias tablas
  • NO puede utilizarse como objetivo de una sentencia INSERT, UPDATE o DELETE de una sentencia de tipo INSERT, UPDATE o DELETE.

Un punto de vista:

  • NO acepta parámetros
  • puede utilizarse como bloque de construcción en una consulta más amplia
  • sólo puede contener una única consulta SELECT
  • NO puede realizar modificaciones en ninguna tabla
  • pero puede (a veces) utilizarse como objetivo de una sentencia INSERT, UPDATE o DELETE.

8voto

Mahesh Puntos 1317

Primero hay que entender que ambas cosas son diferentes. Los procedimientos almacenados se utilizan mejor para las sentencias INSERT-UPDATE-DELETE. y las vistas se utilizan para las sentencias SELECT. y debería utilizar ambas.

En las vistas no se pueden modificar los datos.

7voto

reggie Puntos 4868

Una Vista SQL es una tabla virtual, que se basa en una consulta SQL SELECT. Una vista hace referencia a una o más tablas de la base de datos existentes u otras vistas. Es la imagen instantánea de la base de datos, mientras que un procedimiento almacenado es un grupo de sentencias Transact-SQL compiladas en un único plan de ejecución.

La vista es una simple muestra de los datos almacenados en las tablas de la base de datos, mientras que un procedimiento almacenado es un grupo de sentencias que se pueden ejecutar.

Una vista es más rápida ya que muestra los datos de las tablas referenciadas mientras que un procedimiento de almacenamiento ejecuta sentencias sql.

Consulte este artículo: Vista frente a procedimientos almacenados . Exactamente lo que está buscando

1voto

Robbie Tapping Puntos 1456

@Patrick es correcto con lo que dijo, pero para responder a sus otras preguntas una vista se creará a sí misma en la memoria, y dependiendo del tipo de uniones, datos y si hay alguna agregación hecha, podría ser una vista bastante hambrienta de memoria.

Los procedimientos almacenados hacen todo su procesamiento ya sea usando la Tabla Hash Temp, por ejemplo #tmpTable1 o en memoria usando @tmpTable1. Dependiendo de lo que se quiera hacer.

Un Procedimiento Almacenado es como una Función, pero es llamado directamente por su nombre. en lugar de las Funciones que son usadas dentro de una consulta misma.

Obviamente, la mayoría de las veces las tablas de memoria son más rápidas, si no se recuperan muchos datos.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X