Procedimientos Almacenados: Uso de JSON y XML en SQL Server

Clase 22 de 31Curso de Optimización de Bases de Datos en SQL Server

Resumen

¿Qué son los procedimientos almacenados?

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:

  1. Evitar utilizar el prefijo SP al nombrar procedimientos para no confundirlos con los procedimientos de sistema.
  2. Asignar un nombre identificativo para facilitar su localización y utilización.

Un ejemplo básico en SQL Server para crear un procedimiento es:

CREATE PROCEDURE CP_Retorna_Item
AS
BEGIN
   -- 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.
CREATE PROCEDURE CP_Retorna_Valores
    @ItemID INT,
    @Nombre NVARCHAR(100) OUTPUT,
    @TotalVendido DECIMAL OUTPUT
AS
BEGIN
    SELECT @Nombre = Nombre, @TotalVendido = Precio FROM Productos WHERE ID = @ItemID;
END;

-- Uso del procedimiento
DECLARE @Nombre NVARCHAR(100), @TotalVendido DECIMAL
EXEC 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.

CREATE PROCEDURE SP_ObtieneJSON
    @BusinessEntityID INT,
    @ResultadoJSON NVARCHAR(MAX) OUTPUT
AS
BEGIN
    SELECT * FROM Personas WHERE BusinessEntityID = @BusinessEntityID FOR 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.