Del via


Brug lagrede procedurer med Fabric API til GraphQL

Microsoft Fabric API til GraphQL gør det nemt at forespørge på og mutere data fra en Fabric SQL-database og andre Fabric-datakilder, f.eks. Data Warehouse og Lakehouse, med stærkt indtastede skemaer og et omfattende forespørgselssprog, der giver udviklere mulighed for at oprette en intuitiv API uden at skrive brugerdefineret serverkode. Du kan bruge lagrede procedurer til at indkapsle og genbruge kompleks forretningslogik, herunder inputvalidering og datatransformation.

I dette eksempel lærer vi, hvordan du bruger en lagret procedure til at registrere nye produkter med logik på serversiden til validering, formatering og generering af id, der alle eksponeres via en GraphQL-mutation i Fabric.

Kom i gang

Vi kommer i gang ved at oprette en SQL-database i Fabric:

  1. I dit Fabric-arbejdsområde skal du vælge Nyt element og derefter SQL-database (prøveversion).
  2. Giv databasen et navn, og vælg derefter Eksempeldata for hurtigt at oprette alle de påkrævede tabeller og data i databasen.

Scenarie: Registrer et nyt produkt

Lad os antage, at du vil oprette et nyt produkt med:

  • Validering af prislogik (f.eks. ListPrice > StandardCost)
  • Transformation (f.eks. første bogstav i produktnavnet med stort, trim derefter produktnummeret med store bogstaver)
  • Oprettelse af ProductID (ved at øge det nyeste ProductID)

Trin 1: Opret den lagrede procedure

Her er en lagret T-SQL-procedure, der indkapsler al den forretningslogik, vi har brug for. Klik på Ny forespørgsel i SQL-databasen, og brug følgende sætning:

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;

Klik på Kør for at teste udførelsen. Du bemærker en ny lagret procedure RegisterProduct under mappen Lagrede procedurer i SalesLT-databasen . Brug følgende forespørgsel til at teste procedurelogikken:

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

Trin 2: Opret en GraphQL-API

Det er hurtigt, nemt og ligetil at oprette en API fra din SQL-tabel. Du skal blot klikke på knappen Ny API til GraphQL på båndet SQL-database og give din API et navn.

Vælg derefter SalesLT-tabellerne i databasen og den lagrede procedure, vi lige har oprettet, og klik derefter på Indlæs:

Hent dataskærm til at vælge tabeller og procedurer i API til GraphQL.

GraphQL-API'en, skemaet og alle fortolkere genereres automatisk i sekunder baseret på SQL-tabellerne og den lagrede procedure.

Trin 3: Kald proceduren fra GraphQL

Når API'en er klar, bliver den lagrede procedure tilgængelig som en mutation i Fabric GraphQL-skemaet. Gå til forespørgselseditoren, og udfør følgende mutation:

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

Mutation i GraphQL API-portalen, der viser resultaterne.

Tips

  • Fabric GraphQL genererer automatisk mutationsfelter for lagrede procedurer, der returnerer et resultatsæt, der er defineret i resultatet af proceduren.
  • Forretningslogik lever i proceduren, ikke klienten.
  • Brug kun generering af deterministisk id, hvis du ikke er afhængig af identitetskolonner.

Hvis du eksponerer lagrede procedurer via Fabric API'er, får du mulighed for at definere robuste, ensartede regler i SQL for dine data og få ren adgang til dem via GraphQL.