Входная привязка SQL Azure для Функции Azure
При выполнении функции входная привязка Azure SQL извлекает данные из базы данных и передает ее во входной параметр функции.
Сведения об установке и настройке см. в обзорной статье.
Внимание
В этой статье используются вкладки для поддержки нескольких версий модели программирования Node.js. Модель версии 4 общедоступна и предназначена для более гибкого и интуитивно понятного интерфейса для разработчиков JavaScript и TypeScript. Дополнительные сведения о том, как работает модель версии 4, см. в руководстве разработчика по Функции Azure Node.js. Дополнительные сведения о различиях между версиями 3 и 4 см. в руководстве по миграции.
Примеры
Функцию C# можно создать с помощью одного из следующих режимов C#:
- Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в LTS и не LTS-версиях .NET и платформа .NET Framework.
- Модель внутрипроцессного процесса: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций.
- Скрипт C#: используется в основном при создании функций C# в портал Azure.
Внимание
Поддержка будет завершена для модели в процессе 10 ноября 2026 г. Настоятельно рекомендуется перенести приложения в изолированную рабочую модель для полной поддержки.
Дополнительные примеры входной привязки Azure SQL доступны в репозитории GitHub.
Этот раздел содержит следующие примеры.
- Триггер HTTP, получение записи по идентификатору из строки запроса
- Триггер HTTP, получение нескольких записей из данных маршрута
- Триггер HTTP, удаление записей
Примеры относятся к классу ToDoItem
и соответствующей таблице базы данных:
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
);
Триггер HTTP, получение записи по идентификатору из строки запроса
В следующем примере показана функция C#, которая получает один документ. Функция активируется HTTP-запросом , использующим строку запроса для указания идентификатора. Этот идентификатор используется для получения ToDoItem
записи с указанным запросом.
Примечание.
Параметры строки запроса HTTP задаются с учетом регистра.
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());
}
}
}
Триггер HTTP, получение нескольких записей из параметра маршрута
В следующем примере показана функция C#, которая извлекает документы, возвращаемые запросом. Функция активируется HTTP-запросом , использующим данные маршрута для указания значения параметра запроса. Этот параметр используется для фильтрации ToDoItem
записей в указанном запросе.
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);
}
}
}
Триггер HTTP, удаление записей
В следующем примере показана функция C#, которая выполняет хранимую процедуру с входными данными из параметра запроса HTTP-запроса.
Хранимая процедура dbo.DeleteToDo
должна быть создана в базе данных SQL. В этом примере хранимая процедура удаляет одну запись или все записи в зависимости от значения параметра.
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);
}
}
}
Дополнительные примеры входной привязки Azure SQL доступны в репозитории GitHub.
Этот раздел содержит следующие примеры.
- Триггер HTTP, получение нескольких записей
- Триггер HTTP, получение записи по идентификатору из строки запроса
- Триггер HTTP, удаление записей
Примеры относятся к классу ToDoItem
(в отдельном файле ToDoItem.java
) и соответствующей таблице базы данных:
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
);
Триггер HTTP, получение нескольких записей
В следующем примере показана входная привязка SQL в функции Java, которая активируется HTTP-запросом и считывает из запроса и возвращает результаты в ответе 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();
}
}
Триггер HTTP, получение записи по идентификатору из строки запроса
В следующем примере показана входная привязка SQL в функции Java, которая активируется HTTP-запросом и считывается из запроса, отфильтрованного параметром из строки запроса, и возвращает строку в ответе 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();
}
}
Триггер HTTP, удаление записей
В следующем примере показана входная привязка SQL в функции Java, которая активируется HTTP-запросом и выполняет хранимую процедуру с входными данными из параметра запроса HTTP-запроса.
Хранимая процедура dbo.DeleteToDo
должна быть создана в базе данных. В этом примере хранимая процедура удаляет одну запись или все записи в зависимости от значения параметра.
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();
}
}
Дополнительные примеры входной привязки Azure SQL доступны в репозитории GitHub.
Этот раздел содержит следующие примеры.
- Триггер HTTP, получение нескольких записей
- Триггер HTTP, получение записи по идентификатору из строки запроса
- Триггер HTTP, удаление записей
Примеры относятся к таблице базы данных:
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
);
Триггер HTTP, получение нескольких записей
В следующем примере показана входная привязка SQL, активируется HTTP-запросом и считывается из запроса и возвращает результаты в ответе 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,
};
},
});
Триггер HTTP, получение записи по идентификатору из строки запроса
В следующем примере показана входная привязка SQL, активируется HTTP-запросом и считывается из запроса, отфильтрованного параметром из строки запроса, и возвращает строку в ответе 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,
};
},
});
Триггер HTTP, удаление записей
В следующем примере показана входная привязка SQL, активируется HTTP-запросом и выполняет хранимую процедуру с входными данными из параметра запроса HTTP-запроса.
Хранимая процедура dbo.DeleteToDo
должна быть создана в базе данных. В этом примере хранимая процедура удаляет одну запись или все записи в зависимости от значения параметра.
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,
};
},
});
Дополнительные примеры входной привязки Azure SQL доступны в репозитории GitHub.
Этот раздел содержит следующие примеры.
- Триггер HTTP, получение нескольких записей
- Триггер HTTP, получение записи по идентификатору из строки запроса
- Триггер HTTP, удаление записей
Примеры относятся к таблице базы данных:
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
);
Триггер HTTP, получение нескольких записей
В следующем примере показана входная привязка SQL в файле function.json и функции PowerShell, которая активируется HTTP-запросом и считывает из запроса и возвращает результаты в ответе HTTP.
Ниже приведены данные привязки в файле function.json:
{
"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"
}
В разделе Конфигурация описываются эти свойства.
Ниже приведен пример кода PowerShell для функции в run.ps1
файле:
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
})
Триггер HTTP, получение записи по идентификатору из строки запроса
В следующем примере показана входная привязка SQL в функции PowerShell, которая активируется HTTP-запросом и считывается из запроса, отфильтрованного параметром из строки запроса, и возвращает строку в ответе HTTP.
Ниже приведены данные привязки в файле function.json:
{
"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"
}
В разделе Конфигурация описываются эти свойства.
Ниже приведен пример кода PowerShell для функции в run.ps1
файле:
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
})
Триггер HTTP, удаление записей
В следующем примере показана входная привязка SQL в файле function.json и функция PowerShell, которая активируется HTTP-запросом и выполняет хранимую процедуру с входными данными из параметра запроса HTTP-запроса.
Хранимая процедура dbo.DeleteToDo
должна быть создана в базе данных. В этом примере хранимая процедура удаляет одну запись или все записи в зависимости от значения параметра.
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"
}
В разделе Конфигурация описываются эти свойства.
Ниже приведен пример кода PowerShell для функции в run.ps1
файле:
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
})
Дополнительные примеры входной привязки Azure SQL доступны в репозитории GitHub.
Этот раздел содержит следующие примеры.
- Триггер HTTP, получение нескольких записей
- Триггер HTTP, получение записи по идентификатору из строки запроса
- Триггер HTTP, удаление записей
Примеры относятся к таблице базы данных:
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
);
Триггер HTTP, получение нескольких записей
В следующем примере показана входная привязка SQL в файле function.json и функции Python, которая активируется HTTP-запросом и считывает из запроса и возвращает результаты в ответе HTTP.
Ниже приведен пример кода Python для файла 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"
)
Триггер HTTP, получение записи по идентификатору из строки запроса
В следующем примере показана входная привязка SQL в функции Python, которая активируется HTTP-запросом и считывается из запроса, отфильтрованного параметром из строки запроса, и возвращает строку в ответе HTTP.
Ниже приведен пример кода Python для файла 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"
)
Триггер HTTP, удаление записей
В следующем примере показана входная привязка SQL в файле function.json и функции Python, которая активируется HTTP-запросом и выполняет хранимую процедуру с входными данными из параметра запроса HTTP-запроса.
Хранимая процедура dbo.DeleteToDo
должна быть создана в базе данных. В этом примере хранимая процедура удаляет одну запись или все записи в зависимости от значения параметра.
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
Ниже приведен пример кода Python для файла 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"
)
Атрибуты
Библиотека C# использует атрибут SqlAttribute для объявления привязок SQL в функции, которая имеет следующие свойства:
Свойство атрибута | Description |
---|---|
CommandText | Обязательный. Команда запроса Transact-SQL или имя хранимой процедуры, выполняемой привязкой. |
ConnectionStringSetting | Обязательный. Имя параметра приложения, содержащего строку подключения для базы данных, с которой выполняется запрос или хранимая процедура. Это значение не является фактической строкой подключения и вместо этого должно разрешиться в имя переменной среды. |
CommandType | Обязательный. Значение CommandType, которое является текстом для запроса и StoredProcedure для хранимой процедуры. |
Параметры | Необязательно. Ноль или больше значений параметров, передаваемых команде во время выполнения в виде одной строки. Должно соответствовать формату @param1=param1,@param2=param2 . Ни имя параметра, ни значение параметра не могут содержать запятую (, ) или знак равенства (= ). |
Заметки
В библиотеке среды выполнения функций Java используйте заметку @SQLInput
(com.microsoft.azure.functions.sql.annotation.SQLInput
) для параметров, значение которых будет поступать из SQL Azure. Эта заметка поддерживает следующие элементы:
Элемент | Description |
---|---|
commandText | Обязательный. Команда запроса Transact-SQL или имя хранимой процедуры, выполняемой привязкой. |
connectionStringSetting | Обязательный. Имя параметра приложения, содержащего строку подключения для базы данных, с которой выполняется запрос или хранимая процедура. Это значение не является фактической строкой подключения и вместо этого должно разрешиться в имя переменной среды. |
commandType | Обязательный. Значение CommandType , которое имеет значение Text для запроса и StoredProcedure для хранимой процедуры. |
name | Необходимые. Уникальное имя привязки функции. |
parameters | Необязательно. Ноль или больше значений параметров, передаваемых команде во время выполнения в виде одной строки. Должно соответствовать формату @param1=param1,@param2=param2 . Ни имя параметра, ни значение параметра не могут содержать запятую (, ) или знак равенства (= ). |
Настройка
В следующей таблице описываются свойства, которые можно задать для options
объекта, переданного методу input.sql()
.
Свойство | Description |
---|---|
commandText | Обязательный. Команда запроса Transact-SQL или имя хранимой процедуры, выполняемой привязкой. |
connectionStringSetting | Обязательный. Имя параметра приложения, содержащего строку подключения для базы данных, с которой выполняется запрос или хранимая процедура. Это значение не является фактической строкой подключения и вместо этого должно разрешиться в имя переменной среды. Необязательные ключевые слова в значении строки подключения доступны для уточнения возможности подключения привязок SQL. |
commandType | Обязательный. Значение CommandType, которое является текстом для запроса и StoredProcedure для хранимой процедуры. |
parameters | Необязательно. Ноль или больше значений параметров, передаваемых команде во время выполнения в виде одной строки. Должно соответствовать формату @param1=param1,@param2=param2 . Ни имя параметра, ни значение параметра не могут содержать запятую (, ) или знак равенства (= ). |
Настройка
В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.
Свойство в function.json | Описание |
---|---|
type | Необходимые. Должен иметь значениеsql . |
direction | Обязательный. Должен иметь значениеin . |
name | Необходимые. Имя переменной, представляющей результаты запроса в коде функции. |
commandText | Обязательный. Команда запроса Transact-SQL или имя хранимой процедуры, выполняемой привязкой. |
connectionStringSetting | Обязательный. Имя параметра приложения, содержащего строку подключения для базы данных, с которой выполняется запрос или хранимая процедура. Это значение не является фактической строкой подключения и вместо этого должно разрешиться в имя переменной среды. Необязательные ключевые слова в значении строки подключения доступны для уточнения возможности подключения привязок SQL. |
commandType | Обязательный. Значение CommandType, которое является текстом для запроса и StoredProcedure для хранимой процедуры. |
parameters | Необязательно. Ноль или больше значений параметров, передаваемых команде во время выполнения в виде одной строки. Должно соответствовать формату @param1=param1,@param2=param2 . Ни имя параметра, ни значение параметра не могут содержать запятую (, ) или знак равенства (= ). |
Если разработка ведется на локальном компьютере, добавьте параметры приложения в файл local.settings.json в коллекции Values
.
Использование
Конструктор атрибута принимает текст команды SQL, тип команды, параметры и имя параметра строки подключения. Команда может быть запросом Transact-SQL (T-SQL) с типом команды System.Data.CommandType.Text
или именем хранимой процедуры с типом команды System.Data.CommandType.StoredProcedure
. Имя параметра строки подключения соответствует параметру приложения (для local.settings.json
локальной разработки), который содержит строку подключения к экземплярам Azure SQL или SQL Server.
Запросы, выполняемые входной привязкой, параметризуются в Microsoft.Data.SqlClient, чтобы снизить риск внедрения SQL из значений параметров, переданных в привязку.
Если исключение возникает при выполнении входной привязки SQL, код функции не будет выполняться. Это может привести к возврату кода ошибки, например триггера HTTP, возвращающего код ошибки 500.