Social Icons

twitter facebook google plus linkedin

miércoles, 20 de junio de 2012

Procedimientos Almacenados en SQL Server

Un procedimiento almacenado no es  más que un conjunto de instrucciones T-SQL que puede aceptar varios parámetros de entrada y devolver distintos valores de salida. También puede llamar a otros procedimientos almacenados y, además, incluir una referencia al CLR de .NET.

Usar procedimientos almacenado tiene múltiples ventajas, entre las que destacan:

  • Trafico reducido entre cliente y servidor:  Todas las sentencias se ejecutan en un solo lote de código. Por la red solo viaja el llamado al procedimiento y sus parámetros. No viaja la sentencia completa, porque ya está almacenada en el servidor.

  • Mayor Seguridad: Puede que para ejecutar cierta operación sobre la base de datos se necesiten ciertos privilegios. Para no estar otorgando privilegios sobre la base de daos a los usuarios, se puede especificar que usuario ejecuta las sentencias descritas dentro del procedimiento almacenado. Esto se logra haciendo uso de la clausula EXECUTE AS al momento de crear el procedimiento almacenado.

  • Reutilizar Codigo: Al reutilizar las sentencias y no reescribirlas cada vez que se necesiten, se evitan inconsistencias y se ahorra tiempo.

  • Mantenimiento sencillo:  En el caso de una actualización del modelo de la base de datos  o cualquier modificación de la estructura de esta, no va a ser necesario modificar todas las consultas de la aplicación. Solo se modifican los procedimientos almacenados generando un minimo impacto en la aplicación.

  • Rendimientos mejorados: Una sentencia se compila cada vez que se ejecuta en la base de datos. En cambio, un procedimiento almacenado es compilado una sola vez y se crea un plan de ejecución que se usará cada vez que se hace una llamada al procedimiento almacenado. Se disminuye la carga del servidor.


Para crear un procedimiento almacenado se debe usar la sentencia CREATE PROCEDURE. Por ejemplo:

CREATE PROCEDURE [dbo].[MiProcedimiento]
@genero char(1)
AS
SET NOCOUNT ON
SELECT
[NationalIDNumber],
[OrganizationNode],
[JobTitle],
[MaritalStatus],
[HireDate]
FROM
HumanResources.Employee
WHERE
[Gender] = @genero
GO

En esta porción de código se pueden indicar varias partes:

  1. En la línea 1, se indica que se creará un nuevo procedimiento almacenado y se le otorga un nombre.

  2. Luego vienen los parámetros con sus respectivos tipos de datos.

  3. AS indica que comienzan las instrucciones en t-sql.

  4. SET NOCOUNT ON indica que no se devolverán las filas afectadas. Se puede dejar en OFF si se quiere saber cuantos registros se seleccionaron o cuantos fueron afectados con la operación.

  5. Consulta SQL. Esta consulta trae los nombres de los empleados según el genero.


Para llamar a un procedimiento almacenado, se debe usar la sentencia EXEC. Por ejemplo:


EXEC MiProcedimiento 'M'


Este procedimiento almacenado fue creado en la base de datos AdventureWorks. Pruebalo tu también.