Del via


Bruk lagrede prosedyrer med Fabric API for GraphQL

Microsoft Fabric API for GraphQL gjør det enkelt å spørre og mutere data fra en Fabric SQL-database og andre Fabric-datakilder, for eksempel Data Warehouse og Lakehouse, med sterkt skrevne skjemaer og et rikt spørringsspråk, slik at utviklere kan opprette en intuitiv API uten å skrive egendefinert serverkode. Du kan bruke lagrede prosedyrer til å innkapsle og bruke kompleks forretningslogikk på nytt, inkludert inndatavalidering og datatransformasjon.

I dette eksemplet lærer vi hvordan du bruker en lagret prosedyre til å registrere nye produkter, med serversidelogikk for validering, formatering og ID-generering, som alle eksponeres gjennom en GraphQL-mutasjon i Fabric.

Komme i gang

Vi kommer i gang ved å opprette en SQL-database i Fabric:

  1. Velg Nytt element og SQL-database (forhåndsversjon) i Fabric-arbeidsområdet.
  2. Gi databasen et navn, og velg deretter Eksempeldata for raskt å opprette alle de nødvendige tabellene og dataene i databasen.

Scenario: registrere et nytt produkt

La oss si at du vil opprette et nytt produkt med:

  • Validering av prislogikk (for eksempel. ListPrice > StandardCost)
  • Transformasjon (for eksempel, stor forbokstav i den første bokstaven i produktnavnet, trim deretter med store bokstaver i produktnummeret)
  • ProduktID-generering (ved å øke den nyeste Produkt-ID-en)

Trinn 1: Opprette den lagrede prosedyren

Her er en T-SQL-lagret prosedyre som omslutter all forretningslogikken vi trenger. Klikk ny spørring i SQL-databasen, og bruk følgende setning:

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;

Klikk Kjør for å teste kjøringen. Du legger merke til en ny lagret prosedyre RegisterProduct under mappen Lagrede prosedyrer i SalesLT-databasen . Bruk følgende spørring til å teste prosedyrelogikken:

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

Trinn 2: Opprette en GraphQL-API

Det er raskt, enkelt og enkelt å opprette en API fra SQL-tabellen. Du trenger bare å klikke ny API for GraphQL-knappen på BÅNDET i SQL-databasen og gi API-en et navn.

Velg deretter SalesLT-tabellene i databasen, og den lagrede prosedyren vi nettopp opprettet, og klikk deretter Last inn:

Hent dataskjermen for å velge tabeller og prosedyrer i API for GraphQL

GraphQL API, skjema og alle resolvers genereres automatisk i sekunder basert på SQL-tabeller og lagret prosedyre.

Trinn 3: Kall prosedyren fra GraphQL

Når API-en er klar, blir den lagrede prosedyren tilgjengelig som en mutasjon i Fabric GraphQL-skjemaet. Gå til redigeringsprogrammet for spørringen, og utfør følgende mutasjon:

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
   }
}

Mutasjon i GraphQL API-portalen som viser resultatene

Tips

  • Fabric GraphQL genererer automatisk mutasjonsfelt for lagrede prosedyrer som returnerer et resultatsett definert i utdataene i prosedyren.
  • Forretningslogikken er inne i prosedyren, ikke klienten.
  • Bruk deterministisk ID-generering bare hvis du ikke er avhengig av identitetskolonner.

Hvis du eksponerer lagrede prosedyrer via Stoff-API-er, får du muligheten til å definere robuste, konsekvente regler i SQL for dataene dine, og få tilgang til dem på en ren måte via GraphQL.