Los procedimientos almacenados son fragmentos de código que se ejecutan en una base de datos para realizar tareas específicas. Pueden ser tan complejos como sea necesario y ayudan a procesar eficientemente los datos en la base de datos. Estos procedimientos permiten, por ejemplo, retornar datos, realizar cálculos u otras operaciones repetitivas. Lo importante es que facilitan la gestión y manipulación de las bases de datos, optimizando así el rendimiento del sistema.
Los procedimientos almacenados se pueden crear, modificar y ejecutar directamente dentro del sistema de gestión de bases de datos (SGBD).
¿Cómo creamos un procedimiento almacenado?
Para crear un procedimiento almacenado, se pueden seguir las siguientes recomendaciones:
Evitar utilizar el prefijo SP al nombrar procedimientos para no confundirlos con los procedimientos de sistema.
Asignar un nombre identificativo para facilitar su localización y utilización.
Un ejemplo básico en SQL Server para crear un procedimiento es:
CREATEPROCEDURE CP_Retorna_Item
ASBEGIN-- Incluir la lógica del procedimiento aquíSELECT*FROM Productos WHERE ID =@ID;END;
¿Cómo retornar datos con procedimientos almacenados?
Puedes retornar datos desde un procedimiento almacenado de diferentes maneras:
Como tablas: Un procedimiento puede ejecutar una consulta que retorne filas completas de una tabla.
Como variables: Se pueden definir variables de salida para obtener valores específicos en lugar de una tabla completa, lo que optimiza el rendimiento.
CREATEPROCEDURE CP_Retorna_Valores
@ItemIDINT,@Nombre NVARCHAR(100) OUTPUT,@TotalVendidoDECIMAL OUTPUT
ASBEGINSELECT@Nombre= Nombre,@TotalVendido= Precio FROM Productos WHERE ID =@ItemID;END;-- Uso del procedimientoDECLARE@Nombre NVARCHAR(100),@TotalVendidoDECIMALEXEC CP_Retorna_Valores @ItemID=47,@Nombre OUTPUT,@TotalVendido OUTPUT;
Es preferible utilizar variables de salida cuando necesitas valores específicos, lo que reduce la sobrecarga de datos innecesarios.
¿Utilizar XML y JSON en procedimientos almacenados es posible?
Sí, en SQL Server, puedes usar funciones para convertir los resultados de una consulta en XML o JSON. Esta capacidad es particularmente útil en aplicaciones modernas que consumen datos en estos formatos.
¿Cómo transformar consultas en XML?
Para convertir los resultados de una consulta en XML, puedes usar la cláusula FOR XML:
SELECT Id, Nombre FROM Usuarios FOR XML AUTO, ELEMENTS, ROOT('Usuarios');
Aquí, el resultado será un XML estructurado de forma más comprensible al agregar ELEMENTS y ROOT.
¿Cómo transformar consultas en JSON?
De manera similar, los resultados se convierten a JSON utilizando la cláusula FOR JSON:
SELECT*FROM Personas FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
Y al combinar múltiples tablas y datos, puedes personalizar la salida utilizando atributos como ROOT y PATH para un control más granular sobre la estructura del JSON.
¿Cómo incluir JSON en procedimientos almacenados?
Retornar JSON en procedimientos almacenados es ideal en arquitecturas RESTful. Hace que el proceso sea más eficiente ya que el resultado no necesita ser convertido después por una aplicación externa.
CREATEPROCEDURE SP_ObtieneJSON
@BusinessEntityIDINT,@ResultadoJSON NVARCHAR(MAX) OUTPUT
ASBEGINSELECT*FROM Personas WHERE BusinessEntityID =@BusinessEntityIDFOR JSON PATH;END;DECLARE@ResultadoJSON NVARCHAR(MAX);EXEC SP_ObtieneJSON 1,@ResultadoJSON OUTPUT;
La manipulación y generación de JSON dentro de SQL Server mejora la eficiencia y reduce el procesamiento externo, particularmente útil en aplicaciones con alto tráfico de datos.
Al crear y gestionar procedimientos almacenados, retoras datos esenciales de forma estructurada y eficiente, optimizando aplicaciones sofisticadas y mejorando su rendimiento. Esto es fundamental para desarrolladores y analistas que buscan maximizar el uso de sus bases de datos.
La verdad estoy aprendiendo mucho con tu curso, bastante instructivo, gracias
Yo tambien!
como hacerle mantenimiento a las vistas?
yo tambien quiero sabe eso
tienes varias opciones, desde el Management Studio puedes ir a las vistas, click derecho y selecciones “Design” o desde el Query escribes sp_helptext [nombre de la vista]
Los procedimientos almacenados nos ayudan a sacar el mejor provecho al rendimiento del motor, pero como todo hay que tener en cuenta las mejores prácticas.!
Gracias por estos cursos por fin se como se hace un Json en SQL me sirve un mundo !
¡Genial!
Si desean profundizar mas en los procedimientos almacenados les recomiendo leer la guia de
debido a que hay muchas cosas mas que este curso no las menciona al ser tan especifico. Ademas que los ejemplos y teorias que aparecen son muy entendibles.
POR QUE 45 COMO PARAMETRO EN EL PROCEDIMIENTO??
Fue a modo ejemplo, en la clase de funciones cuando el profe creó la función f_TotalVendidoXProducto definió el parámetro con el StockItemID 45. Puedes ingresar al SP cualquier otro StockItemID de la tabla Warehouse.StockItems como parámetro.
Con el paso de las clases, el curso cada vez es mas interesante.
¿Qué estrategias recomiendan para validar la estructura o el contenido de un JSON recibido como parámetro dentro de un procedimiento almacenado antes de procesarlo?
Para retornar un valor de un procedimiento almacenado en SQL Server, debes usar parámetros de salida (OUTPUT). Primero, define el parámetro en la creación del procedimiento. Luego, al llamar al procedimiento, declara una variable para capturar el valor de salida y asegúrate de especificar que es un parámetro de salida. Aquí tienes un ejemplo básico:
Retornar XML o JSON desde procedimientos almacenados ofrece varias ventajas clave:
Eficiencia de Datos: Al devolver datos en formato XML o JSON, reduces la carga de procesamiento en la aplicación, ya que el servidor de base de datos realiza la transformación, lo que minimiza el tráfico de datos.
Facilidad de Uso: JSON, en particular, es más fácil de manipular en aplicaciones web modernas, facilitando la integración con APIs y simplificando la lectura de datos.
Estructuración de Datos: Ambos formatos permiten estructurar datos complejos, como relaciones entre tablas, lo que mejora la claridad y la organización de la información devuelta.
Interoperabilidad: XML y JSON son estándares ampliamente utilizados, lo que garantiza que la información se puede integrar fácilmente en diferentes sistemas y aplicaciones.
Estas ventajas son especialmente relevantes si tu aplicación maneja grandes volúmenes de datos o requiere una interacción frecuente con APIs.
Definición: Los procedimientos almacenados son fragmentos de código SQL que se almacenan en la base de datos y se pueden ejecutar de manera repetida.
Cuándo usarlos:
Para encapsular lógica compleja que necesita ser ejecutada varias veces.
Para mejorar el rendimiento, ya que se compilan una vez y se pueden reutilizar.
Para mantener la seguridad, limitando el acceso directo a las tablas.
Cuándo no usarlos:
Para operaciones simples que pueden hacerse con consultas directas.
Si el procedimiento es muy grande o complicado, ya que puede ser difícil de mantener.
Cuando se necesita alta flexibilidad y cambios frecuentes en la lógica.
Esto optimiza el uso de SQL Server y garantiza un manejo eficaz de la base de datos.
en el ejercicio falto cambiar el valor del where, para que sea dinámico con el @ que recibe el procedimiento
el curso está bueno
La instrucción FOR JSON PATH, WITHOUT_ARRAY_WRAPPER en SQL Server se utiliza para formatear los resultados de una consulta como un JSON.
FOR JSON PATH permite estructurar el JSON de acuerdo a la jerarquía de las columnas seleccionadas.
WITHOUT_ARRAY_WRAPPER elimina la envoltura de matriz, lo que significa que el resultado será un objeto JSON simple en lugar de un arreglo con un solo objeto cuando solo se devuelve un resultado.
Esto es útil para aplicaciones que esperan un JSON bien estructurado y más fácil de consumir.
Hola, en el query que retorna el JSON se tiene la siguiente linea de codigo:
WHERE BusinessEntityID = 1
y al crear el procedimiento que retorna el JSON basado en este query Roy se olvida de cambiar esta linea de codigo por:
WHERE BusinessEntityID = @businessEntityID
sin esta correcion el procedimiento siempre va a atraer la BusinessEntityID =1 y la idea es usar el parametro de entrada que el procedimiento tiene definido.