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

SQL Server 2016:crear un procedimiento almacenado

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

Pero 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
...

Ahora crearemos un procedimiento almacenado basado en una de las vistas que creamos anteriormente: RecentAlbums ver.

Esta vista devuelve todos los álbumes lanzados en los últimos 20 años. Esto está bien siempre que solo necesite mirar hacia atrás 20 años. Pero, ¿y si quieres que el usuario elija cuántos años debe cubrir?

Un procedimiento almacenado puede resolver este problema.

Crearemos un procedimiento almacenado que acepte un parámetro. El valor del parámetro será el número de años para buscar hacia atrás. Por lo tanto, el usuario puede especificar este valor siempre que ejecute el procedimiento almacenado.

  1. Diseñar el procedimiento almacenado

    Abra una nueva ventana de consulta y agregue el código para el procedimiento almacenado.

    En nuestro caso, copiaremos/pegaremos el código de RecentArtists ver y modificar la parte superior, para que se convierta en un procedimiento almacenado.

    Agregaremos un parámetro llamado @Count eso determinará cuántos años debe mirar hacia atrás el procedimiento almacenado.

    Así que reemplazaremos el valor codificado de 20 con @Count

    Código de muestra

    Aquí está el código de nuestro ejemplo:

    CREATE PROCEDURE spRecentAlbums @Count int
    AS
    SELECT  Albums.ReleaseDate, 
            Albums.AlbumName, 
            Genres.Genre, 
            Artists.ArtistName,
            Artists.ActiveFrom
    FROM Albums 
    INNER JOIN
            Artists ON 
            Albums.ArtistId = Artists.ArtistId 
            INNER JOIN
                Genres ON 
                Albums.GenreId = Genres.GenreId
    WHERE   (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE()));
  2. Crear el procedimiento almacenado

    Una vez que todo se ve bien, puede ejecutar la instrucción para crear el procedimiento almacenado.

    Haga clic en Ejecutar para crear el procedimiento almacenado.

    Una vez que se ha creado el procedimiento almacenado, puede verlo en el Explorador de objetos (es posible que deba actualizar los Procedimientos almacenados nodo primero).

  3. Ejecutar el procedimiento almacenado

    Ahora que se ha creado, puede ejecutar el procedimiento almacenado.

    Abra una nueva ventana de consulta, agregue esto:

    EXEC spRecentAlbums @Count = 5;

    Ahora haga clic en Ejecutar de la barra de herramientas.

    El procedimiento almacenado devolverá todos los álbumes lanzados en los últimos 5 años.

  4. Pruebe diferentes parámetros

    Intente cambiar el valor del parámetro para ver cómo afecta esto a los resultados.

    También puede ejecutar varias declaraciones una tras otra. Aparecerá un nuevo panel de resultados para cada afirmación.

Plantilla de procedimiento almacenado

En SQL Server 2016, puede crear un procedimiento almacenado haciendo clic derecho en Procedimientos almacenados en el Explorador de objetos y seleccionando Nuevo> Procedimiento almacenado... o Nuevo> Procedimiento almacenado compilado de forma nativa... .

Esto abrirá una plantilla que está lista para completarse con su propio procedimiento específico.

Ejecutar un procedimiento almacenado a través de la GUI

También puede utilizar la interfaz gráfica de usuario para ejecutar un procedimiento almacenado.

  1. Inicie el Procedimiento de ejecución Cuadro de diálogo

    En el Explorador de objetos, haga clic derecho en el procedimiento almacenado y seleccione Ejecutar procedimiento almacenado... .

  2. Parámetros de suministro

    Ingrese un valor para cualquier parámetro que requiera el procedimiento almacenado, luego haga clic en OK .

  3. Los resultados

    Se muestran los resultados.

Modificar un procedimiento almacenado

Si necesita modificar un procedimiento almacenado existente, simplemente reemplace CREATE con ALTER (junto con el procedimiento actualizado).

Este ejemplo modifica el procedimiento almacenado para que los resultados se clasifiquen por fecha de publicación en orden descendente:

ALTER PROCEDURE spRecentAlbums @Count int
AS
SELECT  Albums.ReleaseDate, 
        Albums.AlbumName, 
        Genres.Genre, 
        Artists.ArtistName,
        Artists.ActiveFrom
FROM Albums 
INNER JOIN
        Artists ON 
        Albums.ArtistId = Artists.ArtistId 
        INNER JOIN
            Genres ON 
            Albums.GenreId = Genres.GenreId
WHERE   (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE()))
ORDER BY Albums.ReleaseDate DESC;

Procedimientos almacenados del sistema

SQL Server incluye una gran cantidad de procedimientos almacenados del sistema para ayudar en las tareas de administración de la base de datos. Muchas de las tareas que puede realizar a través de la GUI se pueden realizar a través de un procedimiento almacenado del sistema. Por ejemplo, algunas de las cosas que puede hacer con los procedimientos almacenados del sistema incluyen:

  • Configurar cuentas de seguridad
  • Configurar servidores vinculados
  • Cree un plan de mantenimiento de la base de datos
  • Cree catálogos de búsqueda de texto completo
  • Añadir inicio de sesión remoto
  • Configurar replicación
  • Configurar trabajos programados
  • y mucho más...

Los procedimientos almacenados del sistema tienen el prefijo sp_ , por lo que es mejor evitar usar ese prefijo para sus propios procedimientos.

Convenciones de nomenclatura

Es una buena idea desarrollar una convención de nomenclatura consistente para sus procedimientos almacenados (y para todos los demás objetos en su base de datos).

Algunas personas anteponen sus procedimientos almacenados con usp_ (para indicar un procedimiento almacenado definido por el usuario), otros lo comienzan con una palabra clave SQL como select , insertar , actualizar , eliminar . Otros usan una abreviatura para la aplicación.

Algunos usan guiones bajos para separar cada palabra en el procedimiento almacenado (p. ej., recent_albums ), mientras que otros usarán mayúsculas y minúsculas (p. ej., RecentAlbums ).

Por lo tanto, es posible que nuestro procedimiento almacenado pueda recibir cualquiera de los siguientes nombres, según la convención de nomenclatura que se utilice.

  • Álbumes recientes
  • álbumes_recientes
  • uspÁlbumes recientes
  • usp_álbumes_recientes
  • seleccionarÁlbumes recientes
  • select_RecentAlbums
  • select_recent_albums
  • obtenerÁlbumesRecientes
  • obtener_álbumes_recientes

Te dan la imagen. Lo importante es la constancia. Elige uno y quédate con él. Será más fácil cuando necesite usar un procedimiento almacenado. Imagine tener puntajes, o incluso cientos de procedimientos almacenados, y cada vez que vaya a ejecutar uno, debe navegar hasta él en el Explorador de objetos simplemente porque no puede recordar si lo llamó usp_RecentAlbums o uspRecentAlbums .

Como se mencionó, evite usar sp_ como prefijo para los nombres de sus procedimientos almacenados. SQL Server usa este prefijo para los procedimientos almacenados del sistema.

SQL Server busca primero en los procedimientos almacenados del sistema, por lo que, en el mejor de los casos, tendrá un impacto en el rendimiento. En el peor de los casos, su procedimiento no se ejecutará (si comparte un nombre con un procedimiento almacenado del sistema).