sql >> Base de Datos >  >> RDS >> Sqlserver

Crear un procedimiento almacenado en SQL Server 2017

Un procedimiento almacenado es un grupo de instrucciones SQL compiladas en una sola. Los procedimientos almacenados pueden incluir lógica empresarial y otras construcciones de programación.

En SQL Server, un procedimiento almacenado es un grupo de una o más instrucciones Transact-SQL o una referencia a un método de lenguaje de ejecución común (CLR) de Microsoft .NET Framework.

Programabilidad

Un procedimiento almacenado es más que un script largo. Es un script que se ha guardado en SQL Server específicamente bajo los Procedimientos almacenados nodo, y puede:

  • Aceptar parámetros de entrada (y devolver múltiples valores en forma de parámetros de salida al programa de llamada).
  • Contener sentencias de programación.
  • Retornar un valor de estado a un programa de llamada para indicar éxito o falla, y la razón de cualquier falla.

Los procedimientos almacenados suelen contener lógica empresarial. Por ejemplo, un procedimiento almacenado puede aceptar parámetros que se le pasan y compararlos con esos parámetros usando IF declaraciones. Por ejemplo, si el parámetro es un valor, haga esto, si es otro valor, haga eso.

Los procedimientos almacenados pueden mejorar el rendimiento de una aplicación, porque el procedimiento almacenado se analiza y optimiza tan pronto como se crea y luego se almacena en la memoria. Ejecutar una consulta condicional a través de un procedimiento almacenado puede ser extremadamente rápido, en comparación con una aplicación que envía una consulta a través de la red, al servidor SQL, luego se le devuelven todos los datos a través de la red para que pueda filtrarlos y seleccionarlos. solo los registros que le interesan.

Beneficios de los procedimientos almacenados

Estos son algunos de los principales beneficios del uso de procedimientos almacenados:

Beneficio Explicación
Programación modular Puede escribir un procedimiento almacenado una vez, luego llamarlo una y otra vez, desde diferentes partes de una aplicación (e incluso desde varias aplicaciones).
Rendimiento Los procedimientos almacenados proporcionan una ejecución de código más rápida y reducen el tráfico de red.
  • Ejecución más rápida:los procedimientos almacenados se analizan y optimizan tan pronto como se crean y el procedimiento almacenado se almacena en la memoria. Esto significa que se ejecutará mucho más rápido que enviar muchas líneas de código SQL desde su aplicación al servidor SQL. Hacer eso requiere que SQL Server compile y optimice su código SQL cada vez que se ejecuta.
  • Tráfico de red reducido:si envía muchas líneas de código SQL a través de la red a su servidor SQL, esto afectará el rendimiento de la red. Esto es especialmente cierto si tiene cientos de líneas de código SQL y/o tiene mucha actividad en su aplicación. Ejecutar el código en SQL Server (como un procedimiento almacenado) elimina la necesidad de enviar este código a través de la red. El único tráfico de red serán los parámetros proporcionados y los resultados de cualquier consulta.
Seguridad Los usuarios pueden ejecutar un procedimiento almacenado sin necesidad de ejecutar ninguna de las declaraciones directamente. Por lo tanto, un procedimiento almacenado puede proporcionar funcionalidad de base de datos avanzada para usuarios que normalmente no tendrían acceso a estas tareas, pero esta funcionalidad está disponible de forma estrictamente controlada.

Cómo crear un procedimiento almacenado

Para crear un procedimiento almacenado, use CREATE PROCEDURE seguida del código que conforma el procedimiento almacenado. Si su procedimiento almacenado va a aceptar parámetros, deben incluirse después del nombre.

CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS
...

Ejemplo

Aquí hay un ejemplo de cómo crear un procedimiento almacenado y luego ejecutar ese procedimiento almacenado.

  1. Crear el procedimiento almacenado

    Ejecute la siguiente declaración en la base de datos de Música que hemos creado a lo largo de este tutorial.

    Este ejemplo crea un procedimiento almacenado llamado AlbumsFromArtist. Selecciona todos los álbumes de un artista que se especifica cuando se ejecuta el procedimiento almacenado.

    CREATE PROCEDURE spAlbumsFromArtist 
    	@ArtistName varchar(255)
    AS
    	SELECT AlbumName, ReleaseDate
    	FROM Albums
    		INNER JOIN Artists
    		ON Albums.ArtistId = Artists.ArtistId 
    	WHERE Artists.ArtistName = @ArtistName;
    GO
  2. Ver el procedimiento almacenado

    Expanda Programabilidad> Procedimientos almacenados debajo de la base de datos aplicable para ver su procedimiento almacenado recién creado. También puede expandir los Parámetros del procedimiento almacenado para ver los parámetros que necesita pasar cuando lo ejecuta.

  3. Ejecutar el procedimiento almacenado

    Ahora que se ha creado el procedimiento almacenado, puede ejecutarlo usando EXECUTE declaración y pasar los parámetros requeridos.

    En nuestro ejemplo, necesitamos pasar el nombre del artista.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

    Como alternativa, puede omitir el nombre del parámetro al pasar parámetros. Me gusta esto:

    EXECUTE spAlbumsFromArtist "Devin Townsend";

Alterar un procedimiento almacenado

Puede modificar su procedimiento almacenado con ALTER PROCEDURE declaración. Al igual que cuando modifica una vista, puede modificar un procedimiento almacenado simplemente aplicando la nueva definición de procedimiento almacenado.

  1. Alterar el procedimiento almacenado

    Ejecute la siguiente instrucción. Esto agrega una nueva columna a los resultados devueltos por el procedimiento almacenado. También agregamos alias a los nombres de las columnas.

    ALTER PROCEDURE spAlbumsFromArtist 
    	@ArtistName varchar(255)
    AS
    	SELECT 
            al.AlbumName, 
            al.ReleaseDate, 
            g.Genre
    	FROM Albums al
    		INNER JOIN Artists ar
    		ON al.ArtistId = ar.ArtistId 
    		INNER JOIN Genres g
    		ON g.GenreId = al.GenreId 
    	WHERE ar.ArtistName = @ArtistName;
    GO
  2. Ejecutar el procedimiento almacenado

    Ahora que hemos agregado el Genre columna a la vista, el procedimiento almacenado ahora devuelve esa columna cuando lo ejecutamos.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";