Vstupní vazba Azure SQL pro Azure Functions

Při spuštění funkce vstupní vazba Azure SQL načte data z databáze a předá ji vstupnímu parametru funkce.

Informace o nastavení a konfiguraci najdete v přehledu.

Důležité

Tento článek používá karty pro podporu více verzí programovacího modelu Node.js. Model v4 je obecně dostupný a je navržený tak, aby měl flexibilnější a intuitivnější prostředí pro vývojáře v JavaScriptu a TypeScriptu. Další podrobnosti o tom, jak model v4 funguje, najdete v příručce pro vývojáře služby Azure Functions Node.js. Další informace o rozdílech mezi v3 a v4 najdete v průvodci migrací.

Příklady

Funkci jazyka C# je možné vytvořit pomocí jednoho z následujících režimů jazyka C#:

  • Izolovaný model pracovního procesu: Kompilovaná funkce jazyka C#, která běží v pracovním procesu, který je izolovaný od modulu runtime. Izolovaný pracovní proces je nutný pro podporu funkcí C# spuštěných na LTS a jiných verzích než LTS .NET a rozhraní .NET Framework.
  • Model v procesu: Zkompilovaná funkce jazyka C#, která běží ve stejném procesu jako modul runtime služby Functions.
  • Skript jazyka C#: Používá se především při vytváření funkcí jazyka C# na webu Azure Portal.

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na ToDoItem třídu a odpovídající tabulku databáze:

namespace AzureSQL.ToDo
{
    public class ToDoItem
    {
        public Guid Id { get; set; }
        public int? order { get; set; }
        public string title { get; set; }
        public string url { get; set; }
        public bool? completed { get; set; }
    }
}
CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje funkci jazyka C#, která načte jeden záznam. Funkce se aktivuje požadavkem HTTP, který k zadání ID používá řetězec dotazu. Toto ID se používá k načtení záznamu ToDoItem se zadaným dotazem.

Poznámka:

Parametr řetězce dotazu HTTP rozlišují malá a velká písmena.

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker.Http;

namespace AzureSQLSamples
{
    public static class GetToDoItem
    {
        [FunctionName("GetToDoItem")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitem")]
            HttpRequest req,
            [SqlInput(commandText: "select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
                commandType: System.Data.CommandType.Text,
                parameters: "@Id={Query.id}",
                connectionStringSetting: "SqlConnectionString")]
            IEnumerable<ToDoItem> toDoItem)
        {
            return new OkObjectResult(toDoItem.FirstOrDefault());
        }
    }
}

Trigger HTTP, získání více řádků z parametru trasy

Následující příklad ukazuje funkci jazyka C#, která načítá dokumenty vrácené dotazem. Funkce se aktivuje požadavkem HTTP, který používá směrovací data k určení hodnoty parametru dotazu. Tento parametr slouží k filtrování ToDoItem záznamů v zadaném dotazu.

using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker.Http;

namespace AzureSQLSamples
{
    public static class GetToDoItems
    {
        [FunctionName("GetToDoItems")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitems/{priority}")]
            HttpRequest req,
            [SqlInput(commandText: "select [Id], [order], [title], [url], [completed] from dbo.ToDo where [Priority] > @Priority",
                commandType: System.Data.CommandType.Text,
                parameters: "@Priority={priority}",
                connectionStringSetting: "SqlConnectionString")]
            IEnumerable<ToDoItem> toDoItems)
        {
            return new OkObjectResult(toDoItems);
        }
    }
}

Trigger HTTP, odstranění řádků

Následující příklad ukazuje funkci jazyka C#, která spouští uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi SQL. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
namespace AzureSQL.ToDo
{
    public static class DeleteToDo
    {
        // delete all items or a specific item from querystring
        // returns remaining items
        // uses input binding with a stored procedure DeleteToDo to delete items and return remaining items
        [FunctionName("DeleteToDo")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "DeleteFunction")] HttpRequest req,
            ILogger log,
            [SqlInput(commandText: "DeleteToDo", commandType: System.Data.CommandType.StoredProcedure, 
                parameters: "@Id={Query.id}", connectionStringSetting: "SqlConnectionString")] 
                IEnumerable<ToDoItem> toDoItems)
        {
            return new OkObjectResult(toDoItems);
        }
    }
}

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na ToDoItem třídu (v samostatném souboru ToDoItem.java) a odpovídající tabulku databáze:

package com.function;
import java.util.UUID;

public class ToDoItem {
    public UUID Id;
    public int order;
    public String title;
    public String url;
    public boolean completed;

    public ToDoItem() {
    }

    public ToDoItem(UUID Id, int order, String title, String url, boolean completed) {
        this.Id = Id;
        this.order = order;
        this.title = title;
        this.url = url;
        this.completed = completed;
    }
}
CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání více řádků

Následující příklad ukazuje vstupní vazbu SQL ve funkci Java, která je aktivována požadavkem HTTP a přečte z dotazu a vrátí výsledky v odpovědi HTTP.

package com.function;

import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.sql.annotation.SQLInput;

import java.util.Optional;

public class GetToDoItems {
    @FunctionName("GetToDoItems")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            @SQLInput(
                name = "toDoItems",
                commandText = "SELECT * FROM dbo.ToDo",
                commandType = "Text",
                connectionStringSetting = "SqlConnectionString")
                ToDoItem[] toDoItems) {
        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItems).build();
    }
}

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje vstupní vazbu SQL ve funkci Java, která je aktivována požadavkem HTTP a přečte z dotazu filtrovaného parametrem z řetězce dotazu a vrátí řádek v odpovědi HTTP.

public class GetToDoItem {
    @FunctionName("GetToDoItem")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            @SQLInput(
                name = "toDoItems",
                commandText = "SELECT * FROM dbo.ToDo",
                commandType = "Text",
                parameters = "@Id={Query.id}",
                connectionStringSetting = "SqlConnectionString")
                ToDoItem[] toDoItems) {
        ToDoItem toDoItem = toDoItems[0];
        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItem).build();
    }
}

Trigger HTTP, odstranění řádků

Následující příklad ukazuje vstupní vazbu SQL ve funkci Java aktivované požadavkem HTTP a spustí uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
public class DeleteToDo {
    @FunctionName("DeleteToDo")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            @SQLInput(
                name = "toDoItems",
                commandText = "dbo.DeleteToDo",
                commandType = "StoredProcedure",
                parameters = "@Id={Query.id}",
                connectionStringSetting = "SqlConnectionString")
                ToDoItem[] toDoItems) {
        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItems).build();
    }
}

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na tabulku databáze:

CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání více řádků

Následující příklad ukazuje vstupní vazbu SQL aktivovanou požadavkem HTTP a načte z dotazu a vrací výsledky v odpovědi HTTP.

import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';

const sqlInput = input.sql({
    commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo',
    commandType: 'Text',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL input binding function processed a request.');
    const toDoItems = context.extraInputs.get(sqlInput);
    return {
        jsonBody: toDoItems,
    };
}

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');

const sqlInput = input.sql({
    commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo',
    commandType: 'Text',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: (request, context) => {
        context.log('HTTP trigger and SQL input binding function processed a request.');
        const toDoItems = context.extraInputs.get(sqlInput);
        return {
            jsonBody: toDoItems,
        };
    },
});

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje vstupní vazbu SQL aktivovanou požadavkem HTTP a načte z dotazu filtrovaného parametrem z řetězce dotazu a vrátí řádek v odpovědi HTTP.

import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';

const sqlInput = input.sql({
    commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id',
    commandType: 'Text',
    parameters: '@Id={Query.id}',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL input binding function processed a request.');
    const toDoItem = context.extraInputs.get(sqlInput);
    return {
        jsonBody: toDoItem,
    };
}

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');

const sqlInput = input.sql({
    commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id',
    commandType: 'Text',
    parameters: '@Id={Query.id}',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: (request, context) => {
        context.log('HTTP trigger and SQL input binding function processed a request.');
        const toDoItem = context.extraInputs.get(sqlInput);
        return {
            jsonBody: toDoItem,
        };
    },
});

Trigger HTTP, odstranění řádků

Následující příklad ukazuje vstupní vazbu SQL aktivovanou požadavkem HTTP a spustí uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';

const sqlInput = input.sql({
    commandText: 'DeleteToDo',
    commandType: 'StoredProcedure',
    parameters: '@Id={Query.id}',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL input binding function processed a request.');
    const toDoItems = context.extraInputs.get(sqlInput);
    return {
        jsonBody: toDoItems,
    };
}

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');

const sqlInput = input.sql({
    commandText: 'DeleteToDo',
    commandType: 'StoredProcedure',
    parameters: '@Id={Query.id}',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: (request, context) => {
        context.log('HTTP trigger and SQL input binding function processed a request.');
        const toDoItems = context.extraInputs.get(sqlInput);
        return {
            jsonBody: toDoItems,
        };
    },
});

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na tabulku databáze:

CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání více řádků

Následující příklad ukazuje vstupní vazbu SQL v souboru function.json a funkci PowerShellu, která se aktivuje požadavkem HTTP a přečte z dotazu a vrátí výsledky v odpovědi HTTP.

V souboru function.json jsou svázná data:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "in",
    "commandText": "select [Id], [order], [title], [url], [completed] from dbo.ToDo",
    "commandType": "Text",
    "connectionStringSetting": "SqlConnectionString"
}

Oddíl konfigurace vysvětluje tyto vlastnosti.

Následuje ukázkový kód PowerShellu pro funkci v run.ps1 souboru:

using namespace System.Net

param($Request, $todoItems)

Write-Host "PowerShell function with SQL Input Binding processed a request."

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [System.Net.HttpStatusCode]::OK
    Body = $todoItems
})

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje vstupní vazbu SQL ve funkci PowerShellu, která se aktivuje požadavkem HTTP a načte z dotazu filtrovaného parametrem z řetězce dotazu a vrátí řádek v odpovědi HTTP.

V souboru function.json jsou svázná data:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItem",
    "type": "sql",
    "direction": "in",
    "commandText": "select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
    "commandType": "Text",
    "parameters": "@Id = {Query.id}",
    "connectionStringSetting": "SqlConnectionString"
}

Oddíl konfigurace vysvětluje tyto vlastnosti.

Následuje ukázkový kód PowerShellu pro funkci v run.ps1 souboru:

using namespace System.Net

param($Request, $todoItem)

Write-Host "PowerShell function with SQL Input Binding processed a request."

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [System.Net.HttpStatusCode]::OK
    Body = $todoItem
})

Trigger HTTP, odstranění řádků

Následující příklad ukazuje vstupní vazbu SQL v souboru function.json a funkci PowerShellu aktivovanou požadavkem HTTP a spustí uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "in",
    "commandText": "DeleteToDo",
    "commandType": "StoredProcedure",
    "parameters": "@Id = {Query.id}",
    "connectionStringSetting": "SqlConnectionString"
}

Oddíl konfigurace vysvětluje tyto vlastnosti.

Následuje ukázkový kód PowerShellu pro funkci v run.ps1 souboru:

using namespace System.Net

param($Request, $todoItems)

Write-Host "PowerShell function with SQL Input Binding processed a request."

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [System.Net.HttpStatusCode]::OK
    Body = $todoItems
})

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na tabulku databáze:

CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání více řádků

Následující příklad ukazuje vstupní vazbu SQL v souboru function.json a funkci Pythonu, která se aktivuje požadavkem HTTP a přečte z dotazu a vrátí výsledky v odpovědi HTTP.

Následuje ukázkový kód Pythonu pro soubor function_app.py:

import json
import logging
import azure.functions as func
from azure.functions.decorators.core import DataType

app = func.FunctionApp()

@app.function_name(name="GetToDo")
@app.route(route="gettodo")
@app.sql_input(arg_name="todo",
                        command_text="select [Id], [order], [title], [url], [completed] from dbo.ToDo",
                        command_type="Text",
                        connection_string_setting="SqlConnectionString")
def get_todo(req: func.HttpRequest, todo: func.SqlRowList) -> func.HttpResponse:
    rows = list(map(lambda r: json.loads(r.to_json()), todo))

    return func.HttpResponse(
        json.dumps(rows),
        status_code=200,
        mimetype="application/json"
    )

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje vstupní vazbu SQL ve funkci Pythonu, která se aktivuje požadavkem HTTP a načte z dotazu filtrovaného parametrem z řetězce dotazu a vrátí řádek v odpovědi HTTP.

Následuje ukázkový kód Pythonu pro soubor function_app.py:

import json
import logging
import azure.functions as func
from azure.functions.decorators.core import DataType

app = func.FunctionApp()

@app.function_name(name="GetToDo")
@app.route(route="gettodo/{id}")
@app.sql_input(arg_name="todo",
                        command_text="select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
                        command_type="Text",
                        parameters="@Id={id}",
                        connection_string_setting="SqlConnectionString")
def get_todo(req: func.HttpRequest, todo: func.SqlRowList) -> func.HttpResponse:
    rows = list(map(lambda r: json.loads(r.to_json()), todo))

    return func.HttpResponse(
        json.dumps(rows),
        status_code=200,
        mimetype="application/json"
    )

Trigger HTTP, odstranění řádků

Následující příklad ukazuje vstupní vazbu SQL v souboru function.json a funkci Pythonu aktivovanou požadavkem HTTP a spustí uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO

Následuje ukázkový kód Pythonu pro soubor function_app.py:

import json
import logging
import azure.functions as func
from azure.functions.decorators.core import DataType

app = func.FunctionApp()

@app.function_name(name="DeleteToDo")
@app.route(route="deletetodo/{id}")
@app.sql_input(arg_name="todo",
                        command_text="DeleteToDo",
                        command_type="StoredProcedure",
                        parameters="@Id={id}",
                        connection_string_setting="SqlConnectionString")
def get_todo(req: func.HttpRequest, todo: func.SqlRowList) -> func.HttpResponse:
    rows = list(map(lambda r: json.loads(r.to_json()), todo))

    return func.HttpResponse(
        json.dumps(rows),
        status_code=200,
        mimetype="application/json"
    )

Atributy

Knihovna jazyka C# pomocí atributu SqlAttribute deklaruje vazby SQL funkce, která má následující vlastnosti:

Vlastnost atributu Popis
CommandText Povinný: Příkaz dotazu Transact-SQL nebo název uložené procedury spuštěné vazbou.
ConnectionStringSetting Povinný: Název nastavení aplikace, které obsahuje připojovací řetězec databáze, pro kterou se spouští dotaz nebo uložená procedura. Tato hodnota není skutečným připojovací řetězec a musí se místo toho přeložit na název proměnné prostředí.
CommandType Povinný: Hodnota CommandType , což je Text pro dotaz a StoredProcedure pro uloženou proceduru.
Parametry Nepovinné. Nula nebo více hodnot parametrů předaných příkazu během provádění jako jeden řetězec. Musí dodržovat formát @param1=param1,@param2=param2. Název parametru ani hodnota parametru nesmí obsahovat čárku (,) ani znaménko rovná se (=).

Poznámky

V knihovně modulu runtime funkcí Java použijte @SQLInput anotaci (com.microsoft.azure.functions.sql.annotation.SQLInput) u parametrů, jejichž hodnota pochází z Azure SQL. Tato poznámka podporuje následující prvky:

Element (Prvek) Popis
commandText Povinný: Příkaz dotazu Transact-SQL nebo název uložené procedury spuštěné vazbou.
connectionStringSetting Povinný: Název nastavení aplikace, které obsahuje připojovací řetězec databáze, pro kterou se spouští dotaz nebo uložená procedura. Tato hodnota není skutečným připojovací řetězec a musí se místo toho přeložit na název proměnné prostředí.
commandType Povinný: Hodnota CommandType, která je "Text" pro dotaz a "StoredProcedure" pro uloženou proceduru.
Jméno Požadováno. Jedinečný název vazby funkce.
parameters Nepovinné. Nula nebo více hodnot parametrů předaných příkazu během provádění jako jeden řetězec. Musí dodržovat formát @param1=param1,@param2=param2. Název parametru ani hodnota parametru nesmí obsahovat čárku (,) ani znaménko rovná se (=).

Konfigurace

Následující tabulka vysvětluje vlastnosti, které můžete nastavit u objektu předaného options metodě input.sql() .

Vlastnost Popis
commandText Povinný: Příkaz dotazu Transact-SQL nebo název uložené procedury spuštěné vazbou.
connectionStringSetting Povinný: Název nastavení aplikace, které obsahuje připojovací řetězec databáze, pro kterou se spouští dotaz nebo uložená procedura. Tato hodnota není skutečným připojovací řetězec a musí se místo toho přeložit na název proměnné prostředí. Volitelná klíčová slova v hodnotě připojovací řetězec jsou k dispozici pro upřesnění připojení vazeb SQL.
commandType Povinný: Hodnota CommandType , což je Text pro dotaz a StoredProcedure pro uloženou proceduru.
parameters Nepovinné. Nula nebo více hodnot parametrů předaných příkazu během provádění jako jeden řetězec. Musí dodržovat formát @param1=param1,@param2=param2. Název parametru ani hodnota parametru nesmí obsahovat čárku (,) ani znaménko rovná se (=).

Konfigurace

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json.

vlastnost function.json Popis
type Povinný: Musí být nastavena na sqlhodnotu .
direction Povinný: Musí být nastavena na inhodnotu .
Jméno Požadováno. Název proměnné, která představuje výsledek dotazu v kódu funkce.
commandText Povinný: Příkaz dotazu Transact-SQL nebo název uložené procedury spuštěné vazbou.
connectionStringSetting Povinný: Název nastavení aplikace, které obsahuje připojovací řetězec databáze, pro kterou se spouští dotaz nebo uložená procedura. Tato hodnota není skutečným připojovací řetězec a musí se místo toho přeložit na název proměnné prostředí. Volitelná klíčová slova v hodnotě připojovací řetězec jsou k dispozici pro upřesnění připojení vazeb SQL.
commandType Povinný: Hodnota CommandType , což je Text pro dotaz a StoredProcedure pro uloženou proceduru.
parameters Nepovinné. Nula nebo více hodnot parametrů předaných příkazu během provádění jako jeden řetězec. Musí dodržovat formát @param1=param1,@param2=param2. Název parametru ani hodnota parametru nesmí obsahovat čárku (,) ani znaménko rovná se (=).

Při místním vývoji přidejte nastavení aplikace do souboru local.settings.json v kolekci Values .

Využití

Konstruktor atributu přebírá text příkazu SQL, typ příkazu, parametry a název nastavení připojovací řetězec. Příkazem může být dotaz Transact-SQL (T-SQL) s typem System.Data.CommandType.Text příkazu nebo názvem uložené procedury s typem System.Data.CommandType.StoredProcedurepříkazu . Název nastavení připojovací řetězec odpovídá nastavení aplikace (pro local.settings.json místní vývoj), které obsahuje připojovací řetězec instanci Azure SQL nebo SQL Serveru.

Dotazy prováděné vstupní vazbou jsou parametrizovány v Microsoft.Data.SqlClient, aby se snížilo riziko injektáže SQL z hodnot parametrů předaných do vazby.

Pokud dojde k výjimce při spuštění vstupní vazby SQL, kód funkce se nespustí. Výsledkem může být vrácený kód chyby, například trigger HTTP vracející kód chyby 500.

Další kroky