tipos sintaxis procedimientos procedimiento funciones funcion entre diferencia con almacenados sql sql-server-2005 stored-procedures views

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



sintaxis de procedimientos almacenados (10)

  1. A VIEW es una consulta dinámica en la que puede usar 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 asignan memoria. Solo una vista materializada
  4. Una TABLA es solo una ENTIDAD, una vista puede recopilar datos de diferentes ENTIDADES o TABLAS

Estoy confundido acerca de algunos puntos:

  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 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, hágame saber acerca de más puntos, si hay alguno.


@Patrick está en lo correcto 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 se realiza alguna agregación, podría ser una Visión muy hambrienta de memoria.

Los procedimientos almacenados hacen todo su procesamiento, ya sea usando Temp Hash Table, por ejemplo, # tmpTable1 o en memoria usando @ 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 de las veces las tablas de memoria son más rápidas, si no está recuperando una gran cantidad de datos.


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

  1. Las vistas se pueden usar 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 somos un Empleado de Mesa que contiene columnas sensibles como Salario , número de 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.

La principal diferencia es que cuando consultas una vista, su definición se pega en tu 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 indexadas ..


Mahesh no está del todo en lo cierto cuando sugiere que no se pueden 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 puede INSERTAR en esta vista, ya que no todos los campos en toda la tabla están presentes y asumo que PROFILE_ID es la clave principal y no puede ser NULL. Sin embargo, a veces puede INSERTAR en una vista ...

Creé una vista en una tabla existente usando ...

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, entonces no puede insertar o eliminar, pero si la vista es un subconjunto de una sola tabla, entonces normalmente puede hacerlo.


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 se puede usar como bloque de construcción en una consulta más grande
  • puede contener varias instrucciones, bucles, SI ES ELSE, etc.
  • puede realizar modificaciones en una o varias tablas
  • NO se puede usar como objetivo de una instrucción INSERT, UPDATE o DELETE.

Una vista:

  • NO acepta parámetros
  • se puede usar como bloque de construcción en una consulta más grande
  • puede contener una sola consulta SELECT
  • NO puede realizar modificaciones en ninguna mesa
  • pero puede (a veces) usarse como el objetivo de una instrucción INSERT, UPDATE o DELETE.

Primero debes entender Ambos son cosas 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 puede alterar los datos.


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 declaraciones 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 almacenamiento ejecuta sentencias SQL.

Verifique este artículo: Ver vs Procedimientos almacenados . Exactamente lo que estás buscando


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

Se usa un procedimiento de tienda 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. El 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ás hablando.


Una vista representa una tabla virtual . 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 utiliza parámetros para realizar una función ... si está actualizando e insertando datos, o devolviendo valores únicos o conjuntos de datos.

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

Digamos que tengo dos tablas:

Columnas tbl_user: .user_id, .user_name, .user_pw

tbl_profile Columnas: .profile_id, .user_id .profile_description

Entonces, si me encuentro preguntando por esas tablas MUCHO ... en lugar de hacer la unión en CADA pieza 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

Entonces, 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 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.