Compartir a través de


Uso de procedimientos almacenados con Fabric API para GraphQL

La API de Microsoft Fabric para GraphQL facilita la consulta y mutación de datos de una base de datos sql de Fabric y otros orígenes de datos de Fabric, como Data Warehouse y Lakehouse, con esquemas fuertemente tipados y un lenguaje de consulta enriquecido que permite a los desarrolladores crear una API intuitiva sin escribir código de servidor personalizado. Puede usar procedimientos almacenados para encapsular y reutilizar lógica de negocios compleja, incluida la validación de entrada y la transformación de datos.

En este ejemplo, aprendemos a usar un procedimiento almacenado para registrar nuevos productos, con lógica del lado servidor para la validación, el formato y la generación de identificadores, todo ello expuesto a través de una mutación de GraphQL en Fabric.

Comienza

Para empezar, se crea una base de datos SQL en Fabric:

  1. En el área de trabajo de Fabric, seleccione Nuevo elemento y, a continuación, SQL Database (versión preliminar).
  2. Asigne un nombre a la base de datos y seleccione Datos de ejemplo para crear rápidamente todas las tablas y datos necesarios en la base de datos.

Escenario: registrar un nuevo producto

Supongamos que desea crear un nuevo producto con:

  • Validación de la lógica de precios (por ejemplo, ). ListPrice > StandardCost)
  • Transformación (por ejemplo, poner en mayúscula la primera letra del nombre del producto, recortar y luego poner en mayúsculas el número de producto).
  • Generación de ProductID (incrementando el productID más reciente)

Paso 1: Crear el procedimiento almacenado

Este es un procedimiento almacenado de T-SQL que encapsula toda la lógica de negocios que necesitamos. En la base de datos SQL, haga clic en Nueva consulta y use la siguiente instrucción:

CREATE PROCEDURE SalesLT.RegisterProduct
  @Name nvarchar(50),
  @ProductNumber nvarchar(25),
  @StandardCost money,
  @ListPrice money,
  @SellStartDate datetime
AS
BEGIN
  SET NOCOUNT ON;
  SET IDENTITY\_INSERT SalesLT.Product ON;

  -- Validate pricing logic
  IF @ListPrice <= @StandardCost
    THROW 50005, 'ListPrice must be greater than StandardCost.', 1;

-- Transform product name: capitalize first letter only
  DECLARE @CleanName nvarchar(50);
  SET @CleanName = UPPER(LEFT(LTRIM(RTRIM(@Name)), 1)) + LOWER(SUBSTRING(LTRIM(RTRIM(@Name)), 2, 49));

  -- Trim and uppercase product number
  DECLARE @CleanProductNumber nvarchar(25);
  SET @CleanProductNumber = UPPER(LTRIM(RTRIM(@ProductNumber)));

  -- Generate ProductID by incrementing the latest existing ID
  DECLARE @ProductID int;
  SELECT @ProductID = ISNULL(MAX(ProductID), 0) + 1 FROM SalesLT.Product;

  INSERT INTO SalesLT.Product (
    ProductID,
    Name,
    ProductNumber,
    StandardCost,
    ListPrice,
    SellStartDate
  )
  OUTPUT 
    inserted.ProductID,
    inserted.Name,
    inserted.ProductNumber,
    inserted.StandardCost,
    inserted.ListPrice,
    inserted.SellStartDate
  VALUES (
    @ProductID,
    @CleanName,
    @CleanProductNumber,
    @StandardCost,
    @ListPrice,
    @SellStartDate
  );
END;

Haga clic en Ejecutar para probar la ejecución. Verá un nuevo procedimiento almacenado RegisterProduct en la carpeta Procedimientos almacenados de la base de datos SalesLT . Use la consulta siguiente para probar la lógica del procedimiento:

DECLARE @RC int
DECLARE @Name nvarchar(50)
DECLARE @ProductNumber nvarchar(25)
DECLARE @StandardCost money
DECLARE @ListPrice money
DECLARE @SellStartDate datetime

-- TODO: Set parameter values here.
Set @Name = 'test product'       
Set @ProductNumber = 'tst-0012'
Set @StandardCost = '10.00'
Set @ListPrice = '9.00'
Set @SellStartDate = '2025-05-01T00:00:00Z'

EXECUTE @RC = \[SalesLT\].\[RegisterProduct\] 
   @Name
  ,@ProductNumber
  ,@StandardCost
  ,@ListPrice
  ,@SellStartDate
GO

Paso 2: Creación de una API de GraphQL

La creación de una API a partir de tu tabla SQL es rápida, fácil y directa. Solo tiene que hacer clic en el botón Nueva API para GraphQL de la cinta de opciones de SQL Database y asignarle un nombre a la API.

A continuación, seleccione las tablas SalesLT de la base de datos y el procedimiento almacenado que acabamos de crear y, a continuación, haga clic en Cargar:

Obtener pantalla de datos para seleccionar tablas y procedimientos en API para GraphQL

El GraphQL API, el esquema y todos los resolutores se generan automáticamente en segundos a partir de las tablas SQL y el procedimiento almacenado.

Paso 3: Llamada al procedimiento desde GraphQL

Una vez que la API esté lista, el procedimiento almacenado estará disponible como una mutación en el esquema de Fabric GraphQL. Vaya al editor de consultas y ejecute la mutación siguiente:

mutation {
   executeRegisterProduct (
    Name: " graphQL swag ",
    ProductNumber: "gql-swag-001",
    StandardCost: 10.0,
    ListPrice: 15.0,
    SellStartDate: "2025-05-01T00:00:00Z"
  ) {
ProductID
    Name
    ProductNumber
    StandardCost
    ListPrice
    SellStartDate
   }
}

Mutación en el portal de GraphQL API que muestra los resultados

Sugerencias

  • Fabric GraphQL genera automáticamente campos de mutación para procedimientos almacenados que devuelven un conjunto de resultados definido en la salida del procedimiento.
  • La lógica de negocios reside dentro del procedimiento, no en el cliente.
  • Utiliza la generación de identificadores determinista solo si no dependes de columnas de identidad.

La exposición de procedimientos almacenados a través de las API de Fabric proporciona la capacidad de definir reglas sólidas y coherentes en SQL para los datos y acceder a ellos de forma limpia a través de GraphQL.