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

Resuelto NoviceToDotNet asked hace 13 años • 10 respuestas

Estoy confundido acerca de 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. ¿Las vistas permiten la creación de consultas dinámicas donde podemos pasar parámetros?

  4. ¿Cuál es el más rápido y sobre qué base uno es más rápido que el otro?

  5. ¿Las vistas o los procedimientos almacenados asignan memoria de forma permanente?

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

Por favor, avíseme sobre más puntos, si los hay.

NoviceToDotNet avatar Mar 04 '11 21:03 NoviceToDotNet
Aceptado

Una vista representa una tabla virtual . Puede unir varias tablas en una vista y usar la vista para presentar los datos como si provinieran de una sola tabla.

Un procedimiento almacenado utiliza parámetros para realizar una función... ya sea actualizando e insertando datos, o devolviendo valores únicos o conjuntos de datos.

Creación de vistas y procedimientos almacenados : tiene información de Microsoft sobre cuándo y por qué usar cada uno.

Digamos que tengo dos tablas:

  • tbl_user, con columnas: user_id, user_name,user_pw
  • tbl_profile, con columnas: profile_id, user_id,profile_description

Entonces, si me encuentro consultando MUCHO en esas tablas... en lugar de unir CADA parte 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

Por lo tanto, si quiero consultar profile_descriptionen user_idel futuro, todo lo que tengo que hacer es:

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

Ese código podría usarse 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

Entonces, más adelante puedo llamar:

dbo.getDesc 25

y obtendré la descripción de user_id25, donde 25es su parámetro.

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

Patrick avatar Mar 04 '2011 14:03 Patrick

Mucha información disponible aquí.

Aquí tenéis un buen resumen:

Un procedimiento almacenado:

  • Acepta parámetros
  • NO se puede utilizar como bloque de construcción en una consulta más grande.
  • Puede contener varias sentencias, bucles, IF ELSE, etc.
  • Puede realizar modificaciones en una o varias tablas.
  • NO se puede utilizar como destino de una declaración INSERT, UPDATE o DELETE.

Una vista:

  • NO acepta parámetros
  • Se puede utilizar como bloque de construcción en una consulta más grande.
  • Puede contener solo una única consulta SELECT
  • NO se pueden realizar modificaciones en ninguna tabla.
  • Pero puede (a veces) usarse como destino de una declaración INSERT, UPDATE o DELETE.
cusimar9 avatar Mar 04 '2011 14:03 cusimar9