2011-03-04 14 views
69

Estoy confundido acerca de algunos puntos:¿Cuál es la diferencia entre un procedimiento almacenado y una vista?

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

  2. ¿Cuándo debo usar los procedimientos almacenados, y cuándo debo usar las vistas, en SQL Server?

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

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

  5. ¿Las vistas o los procedimientos almacenados asignan la 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?

Háganme saber los puntos a seguir, si los hubiere.

Respuesta

77

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

Un procedimiento almacenado usa parámetros para realizar una función ... ya sea que esté actualizando e insertando datos, o devolviendo valores individuales o conjuntos de datos.

Creating Views and Stored Procedures - tiene información de Microsoft sobre cuándo y por qué usar cada una.

Decir que tengo dos tablas:

tbl_user Columnas: .user_id, .user_name, .user_pw

tbl_profile Columnas: .profile_id, .user_id .profile_description

Así que si me encuentro preguntando por esas tablas MUCHO ... en lugar de hacer la unión en CADA pieza de SQL definiría un Ver 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 

que el 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 adelante puedo llamar

dbo.getDesc 25 

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

Obviamente hay MUCHO más detalles, pero esta es solo la idea básica.

+0

Pero puedo unirme para unir varias tablas en un procedimiento almacenado y donde no tengo que dar el parámetro. – NoviceToDotNet

+2

pero ¿POR QUÉ harías eso? ¿Qué está tratando de lograr? Puede usar una vista COMO una tabla ... los procedimientos almacenados son para HACER cosas ... las vistas son para hacer su vida más fácil. – Patrick

+0

Considere una vista como una consulta almacenada por lo que si tiene dos tablas que considera que debe unir mucho para realizar el trabajo, puede crear una vista para trabajar en contra, de modo que no tenga que unirse a ellas todo el tiempo . – Patrick

3

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

Ver es mostrar 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 datos de las tablas a las que se hace referencia mientras que un procedimiento de tienda ejecuta sentencias SQL.

Ver este artículo: View vs Stored Procedures. Exactamente lo que está buscando

5

Lo primero que debe entender Las dos cosas son diferentes. Los procedimientos almacenados se utilizan mejor para las instrucciones INSERT-UPDATE-DELETE. y Las vistas se usan para las declaraciones SELECT. y deberías usar ambos.

En las vistas no se pueden modificar los datos.

54

Un montón de información disponible en la web

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

Aquí es 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 declaraciones, bucles, SI ES MÁS, etc.
  • pueden realizar modificaciones a una o varias mesas
  • no puede ser utilizado como blanco de un INSERT, UPDATE o DELETE comunicado.

Una vista:

  • NO acepta parámetros
  • puede ser utilizado como bloque de construcción en una consulta más grande
  • puede contener sólo una consulta SELECT sola
  • no pueden realizar modificaciones a cualquier tabla
  • pero puede (a veces) usarse como el objetivo de una instrucción INSERT, UPDATE o DELETE.
+1

+1 para la enumeración de las principales diferencias. –

+1

También las vistas no deben contener ninguna cláusula de "orden por" o "superior" – sksallaj

1

@Patrick tiene razón con lo que dijo, pero para responder a sus otras preguntas una Vista se creará en la Memoria, y dependiendo del tipo de Uniones, Datos y si hay alguna agregación realizada, podría ser bastante hambriento de memoria.

Los procedimientos almacenados realizan todo su procesamiento, ya sea utilizando Temp Hash Table, por ejemplo, # tmpTable1 o en memoria utilizando @ tmpTable1. Dependiendo de lo que quieras decirle que haga.

Un procedimiento almacenado es como una función, pero se llama directamente por su nombre. en lugar de funciones que realmente se utilizan dentro de una consulta en sí.

Obviamente la mayoría del tiempo Las tablas de memoria son más rápidas, si no está recuperando una gran cantidad de datos.

3
  1. Una vista es una consulta dinámica donde se puede utilizar un "WHERE" -Clause
  2. Un procedimiento almacenado es una selección de datos fija, que devuelve un resultado predefinido
  3. Ni una vista, ni un procedimiento almacenado asignar memoria Sólo una vista materializada
  4. una tabla es simplemente una entidad, una vista puede recoger datos de diferentes entidades o tablas
4

Una vista es una forma sencilla de guardar un complejo SELECT en la base de datos.

Un procedimiento de almacenamiento se utiliza cuando SQL simple simplemente no es suficiente. Los procedimientos de la tienda contienen variables, bucles y llamadas a otros procedimientos almacenados. Es un lenguaje de programación, no un lenguaje de consulta.

  1. Las vistas son estáticas. Piense en ellos como nuevas tablas con un cierto diseño y los datos en ellos se crean sobre la marcha utilizando la consulta que lo creó. Al igual que con cualquier tabla SQL, puede ordenarla y filtrarla con WHERE, GROUP BY y ORDER BY.

  2. Depende de lo que hagas.

  3. Depende de la base de datos. Las vistas simples solo ejecutan la consulta y filtran el resultado. Pero las bases de datos como Oracle permiten crear una vista "materializada" que básicamente es una tabla que se actualiza automáticamente cuando cambian los datos subyacentes de la vista.

    Una vista materializada le permite crear índices en las columnas de la vista (especialmente en las columnas calculadas que no existen en ninguna parte de la base de datos).

  4. No entiendo de lo que está hablando.

3

La principal diferencia es que cuando consulta una vista, su definición se pega en su consulta. El procedimiento también podría dar resultados de consulta, pero está compilado y es mucho más rápido. Otra opción son las vistas indizadas ..

5

Vistas: son la tabla virtual que consta de una o más filas y columnas de diferentes tablas reales de la base de datos. Es la plantilla de filas y columnas de varias tablas. No puede pasar ningún parámetro aquí.

Procedimientos almacenados: son una colección de sentencias sql previamente ejecutadas donde puede enviar los parámetros como entrada y recuperar los datos de salida.

Las vistas se pueden utilizar en el Procedimiento almacenado pero el Procedimiento almacenado no se puede usar en Vistas ...!

1

Mahesh no es del todo correcto cuando sugiere que no puede alterar los datos en una vista. Entonces con la vista de patrick

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 

PUEDO actualizar los datos ... como ejemplo puedo hacer cualquiera de estos ...

Update vw_user_profile Set profile_description='Manager' where user_id=4 

o

Update tbl_profile Set profile_description='Manager' where user_id=4 

no se puede insertar a este punto de vista ya que no todos los campos en toda la mesa están presentes y estoy suponiendo que PROFILE_ID es la clave principal y se puede' t ser NULL Sin embargo a veces se puede insertar en una vista ...

creé una vista en una tabla existente utilizando ...

Create View Junk as SELECT * from [TableName] 

ENTONCES

Insert into junk (Code,name) values 
('glyn','Glyn Roberts'), 
('Mary','Maryann Roberts') 

y

DELETE from Junk Where ID>4 

Tanto el INSERT como el DELETE funcionaron en este caso

Obviamente, no puede actualizar ningún campo que se agregue o calcule, pero cualquier vista que sea simplemente una vista directa debería ser actualizable.

Si la vista contiene más de una tabla, no puede insertar o eliminar, pero si la vista es un subconjunto de una sola tabla, entonces normalmente puede hacerlo.

0

Además de los comentarios anteriores, me gustaría agregar algunos puntos sobre Vistas.

  1. Las vistas se pueden utilizar para ocultar la complejidad. Imagine un escenario en el que trabajan 5 personas en un proyecto, pero solo uno de ellos es demasiado bueno con elementos de bases de datos como combinaciones complejas. En tal escenario, puede crear vistas que pueden ser consultadas fácilmente por otros miembros del equipo mientras consultan una sola tabla.
  2. La seguridad se puede implementar fácilmente mediante Vistas. Supongamos que tenemos una Tabla Empleado que contiene columnas sensibles como Salario, Número SSN. No se supone que estas columnas sean visibles para los usuarios que no están autorizados a verlas. En tal caso, podemos crear una Vista seleccionando las columnas en una tabla que no requiera ninguna autorización como Nombre, Edad etc., sin exponer columnas sensibles (como Salario, etc., que mencionamos anteriormente). Ahora podemos eliminar el permiso para consultar directamente la tabla Empleado y solo mantener el permiso de lectura en la Vista. De esta forma, podemos implementar seguridad usando Vistas.
Cuestiones relacionadas