Входная привязка 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.

Дополнительные примеры входной привязки Azure SQL доступны в репозитории GitHub.

Этот раздел содержит следующие примеры.

Примеры относятся к классу 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.

Этот раздел содержит следующие примеры.

Примеры относятся к классу 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.

Этот раздел содержит следующие примеры.

Примеры относятся к таблице базы данных:

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.

Этот раздел содержит следующие примеры.

Примеры относятся к таблице базы данных:

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.

Этот раздел содержит следующие примеры.

Примеры относятся к таблице базы данных:

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.

Ниже приведены данные привязки в файле function.json:

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

В разделе Конфигурация описываются эти свойства.

Ниже приведен пример кода Python:

import azure.functions as func
import json

def main(req: func.HttpRequest, todoItems: func.SqlRowList) -> func.HttpResponse:
    rows = list(map(lambda r: json.loads(r.to_json()), todoItems))

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

Триггер HTTP, получение записи по идентификатору из строки запроса

В следующем примере показана входная привязка SQL в функции Python, которая активируется HTTP-запросом и считывается из запроса, отфильтрованного параметром из строки запроса, и возвращает строку в ответе HTTP.

Ниже приведены данные привязки в файле function.json:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "$return"
},
{
    "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"
}

В разделе Конфигурация описываются эти свойства.

Ниже приведен пример кода Python:

import azure.functions as func
import json

def main(req: func.HttpRequest, todoItem: func.SqlRowList) -> func.HttpResponse:
    rows = list(map(lambda r: json.loads(r.to_json()), todoItem))

    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
{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "$return"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "in",
    "commandText": "DeleteToDo",
    "commandType": "StoredProcedure",
    "parameters": "@Id = {Query.id}",
    "connectionStringSetting": "SqlConnectionString"
}

В разделе Конфигурация описываются эти свойства.

Ниже приведен пример кода Python:

import azure.functions as func
import json

def main(req: func.HttpRequest, todoItems: func.SqlRowList) -> func.HttpResponse:
    rows = list(map(lambda r: json.loads(r.to_json()), todoItems))

    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.

Следующие шаги