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.
|
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.
-
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()));
-
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).
-
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.
-
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.
-
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... .
-
Parámetros de suministro
Ingrese un valor para cualquier parámetro que requiera el procedimiento almacenado, luego haga clic en OK .
-
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).