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.
Důležité
Podpora modelu v procesu skončí 10. listopadu 2026. Důrazně doporučujeme migrovat aplikace do izolovaného modelu pracovního procesu pro plnou podporu.
Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.
Tato část obsahuje následující příklady:
- Trigger HTTP, získání řádku podle ID z řetězce dotazu
- Trigger HTTP, získání více řádků ze směrovacích dat
- Trigger HTTP, odstranění řádků
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:
- Trigger HTTP, získání více řádků
- Trigger HTTP, získání řádku podle ID z řetězce dotazu
- Trigger HTTP, odstranění řádků
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:
- Trigger HTTP, získání více řádků
- Trigger HTTP, získání řádku podle ID z řetězce dotazu
- Trigger HTTP, odstranění řádků
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:
- Trigger HTTP, získání více řádků
- Trigger HTTP, získání řádku podle ID z řetězce dotazu
- Trigger HTTP, odstranění řádků
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:
- Trigger HTTP, získání více řádků
- Trigger HTTP, získání řádku podle ID z řetězce dotazu
- Trigger HTTP, odstranění řádků
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 sql hodnotu . |
direction | Povinný: Musí být nastavena na in hodnotu . |
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í
Definice vazby zahrnuje 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.StoredProcedure
pří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.
Důležité
Pro zajištění optimálního zabezpečení byste měli použít ID Microsoft Entra se spravovanými identitami pro připojení mezi službami Functions a službou Azure SQL Database. Spravované identity usnadňují zabezpečení aplikace odstraněním tajných kódů z nasazení aplikací, jako jsou přihlašovací údaje v připojovací řetězec, názvy serverů a používané porty. V tomto kurzu se dozvíte, jak pomocí spravovaných identit připojit aplikaci funkcí k Azure SQL pomocí spravovaných identit a vazeb SQL.
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.