Vinculação de entrada SQL do Azure para o Azure Functions

Quando uma função é executada, a associação de entrada SQL do Azure recupera dados de um banco de dados e os passa para o parâmetro de entrada da função.

Para obter informações sobre detalhes de instalação e configuração, consulte a visão geral.

Importante

Este artigo usa guias para oferecer suporte a várias versões do modelo de programação Node.js. O modelo v4 está geralmente disponível e foi projetado para ter uma experiência mais flexível e intuitiva para desenvolvedores JavaScript e TypeScript. Para obter mais detalhes sobre como o modelo v4 funciona, consulte o Guia do desenvolvedor do Azure Functions Node.js. Para saber mais sobre as diferenças entre v3 e v4, consulte o guia de migração.

Exemplos

Uma função C# pode ser criada usando um dos seguintes modos C#:

  • Modelo de trabalho isolado: função C# compilada que é executada em um processo de trabalho isolado do tempo de execução. O processo de trabalho isolado é necessário para suportar funções C# em execução nas versões LTS e não-LTS .NET e .NET Framework.
  • Modelo em processo: função C# compilada que é executada no mesmo processo que o tempo de execução do Functions.
  • Script C#: usado principalmente quando você cria funções C# no portal do Azure.

Importante

O suporte para o modelo em processo terminará em 10 de novembro de 2026. É altamente recomendável que você migre seus aplicativos para o modelo de trabalho isolado para obter suporte total.

Mais exemplos para a associação de entrada SQL do Azure estão disponíveis no repositório GitHub.

Esta seção contém os seguintes exemplos:

Os exemplos referem-se a uma ToDoItem classe e a uma tabela de banco de dados correspondente:

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
);

Gatilho HTTP, obter linha por ID da cadeia de caracteres de consulta

O exemplo a seguir mostra uma função C# que recupera um único registro. A função é acionada por uma solicitação HTTP que usa uma cadeia de caracteres de consulta para especificar a ID. Esse ID é usado para recuperar um ToDoItem registro com a consulta especificada.

Nota

O parâmetro HTTP query string diferencia maiúsculas de minúsculas.

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());
        }
    }
}

Gatilho HTTP, obter várias linhas do parâmetro route

O exemplo a seguir mostra uma função C# que recupera documentos retornados pela consulta. A função é acionada por uma solicitação HTTP que usa dados de rota para especificar o valor de um parâmetro de consulta. Esse parâmetro é usado para filtrar os ToDoItem registros na consulta especificada.

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

Gatilho HTTP, excluir linhas

O exemplo a seguir mostra uma função C# que executa um procedimento armazenado com entrada do parâmetro HTTP request query.

O procedimento dbo.DeleteToDo armazenado deve ser criado no banco de dados SQL. Neste exemplo, o procedimento armazenado exclui um único registro ou todos os registros, dependendo do valor do parâmetro.

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

Mais exemplos para a associação de entrada SQL do Azure estão disponíveis no repositório GitHub.

Esta seção contém os seguintes exemplos:

Os exemplos referem-se a uma ToDoItem classe (em um arquivo ToDoItem.javaseparado) e a uma tabela de banco de dados correspondente:

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
);

Gatilho HTTP, obter várias linhas

O exemplo a seguir mostra uma ligação de entrada SQL em uma função Java que é acionada por uma solicitação HTTP e lê de uma consulta e retorna os resultados na resposta 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();
    }
}

Gatilho HTTP, obter linha por ID da cadeia de caracteres de consulta

O exemplo a seguir mostra uma ligação de entrada SQL em uma função Java que é acionada por uma solicitação HTTP e lê de uma consulta filtrada por um parâmetro da cadeia de caracteres de consulta e retorna a linha na resposta 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();
    }
}

Gatilho HTTP, excluir linhas

O exemplo a seguir mostra uma ligação de entrada SQL em uma função Java que é acionada por uma solicitação HTTP e executa um procedimento armazenado com entrada do parâmetro HTTP request query.

O procedimento dbo.DeleteToDo armazenado deve ser criado no banco de dados. Neste exemplo, o procedimento armazenado exclui um único registro ou todos os registros, dependendo do valor do parâmetro.

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();
    }
}

Mais exemplos para a associação de entrada SQL do Azure estão disponíveis no repositório GitHub.

Esta seção contém os seguintes exemplos:

Os exemplos referem-se a uma tabela de banco de dados:

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
);

Gatilho HTTP, obter várias linhas

O exemplo a seguir mostra uma associação de entrada SQL que é acionada por uma solicitação HTTP e lê de uma consulta e retorna os resultados na resposta 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,
        };
    },
});

Gatilho HTTP, obter linha por ID da cadeia de caracteres de consulta

O exemplo a seguir mostra uma associação de entrada SQL que é acionada por uma solicitação HTTP e lê de uma consulta filtrada por um parâmetro da cadeia de caracteres de consulta e retorna a linha na resposta 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,
        };
    },
});

Gatilho HTTP, excluir linhas

O exemplo a seguir mostra uma associação de entrada SQL que é acionada por uma solicitação HTTP e executa um procedimento armazenado com entrada do parâmetro de consulta de solicitação HTTP.

O procedimento dbo.DeleteToDo armazenado deve ser criado no banco de dados. Neste exemplo, o procedimento armazenado exclui um único registro ou todos os registros, dependendo do valor do parâmetro.

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,
        };
    },
});

Mais exemplos para a associação de entrada SQL do Azure estão disponíveis no repositório GitHub.

Esta seção contém os seguintes exemplos:

Os exemplos referem-se a uma tabela de banco de dados:

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
);

Gatilho HTTP, obter várias linhas

O exemplo a seguir mostra uma associação de entrada SQL em um arquivo function.json e uma função do PowerShell que é acionada por uma solicitação HTTP e lê de uma consulta e retorna os resultados na resposta HTTP.

O seguinte é a vinculação de dados no arquivo 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"
}

A seção de configuração explica essas propriedades.

A seguir está um exemplo de código do PowerShell para a função no run.ps1 arquivo:

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

Gatilho HTTP, obter linha por ID da cadeia de caracteres de consulta

O exemplo a seguir mostra uma associação de entrada SQL em uma função do PowerShell que é acionada por uma solicitação HTTP e lê de uma consulta filtrada por um parâmetro da cadeia de caracteres de consulta e retorna a linha na resposta HTTP.

O seguinte é a vinculação de dados no arquivo 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"
}

A seção de configuração explica essas propriedades.

A seguir está um exemplo de código do PowerShell para a função no run.ps1 arquivo:

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

Gatilho HTTP, excluir linhas

O exemplo a seguir mostra uma associação de entrada SQL em um arquivo function.json e uma função do PowerShell que é acionada por uma solicitação HTTP e executa um procedimento armazenado com entrada do parâmetro de consulta de solicitação HTTP.

O procedimento dbo.DeleteToDo armazenado deve ser criado no banco de dados. Neste exemplo, o procedimento armazenado exclui um único registro ou todos os registros, dependendo do valor do parâmetro.

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

A seção de configuração explica essas propriedades.

A seguir está um exemplo de código do PowerShell para a função no run.ps1 arquivo:

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

Mais exemplos para a associação de entrada SQL do Azure estão disponíveis no repositório GitHub.

Esta seção contém os seguintes exemplos:

Os exemplos referem-se a uma tabela de banco de dados:

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
);

Gatilho HTTP, obter várias linhas

O exemplo a seguir mostra uma ligação de entrada SQL em um arquivo function.json e uma função Python que é acionada por uma solicitação HTTP e lê de uma consulta e retorna os resultados na resposta HTTP.

A seguir está o código python de exemplo para o arquivo 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"
    )

Gatilho HTTP, obter linha por ID da cadeia de caracteres de consulta

O exemplo a seguir mostra uma ligação de entrada SQL em uma função Python que é acionada por uma solicitação HTTP e lê de uma consulta filtrada por um parâmetro da cadeia de caracteres de consulta e retorna a linha na resposta HTTP.

A seguir está o código python de exemplo para o arquivo 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"
    )

Gatilho HTTP, excluir linhas

O exemplo a seguir mostra uma ligação de entrada SQL em um arquivo function.json e uma função Python que é acionada por uma solicitação HTTP e executa um procedimento armazenado com entrada do parâmetro HTTP request query.

O procedimento dbo.DeleteToDo armazenado deve ser criado no banco de dados. Neste exemplo, o procedimento armazenado exclui um único registro ou todos os registros, dependendo do valor do parâmetro.

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

A seguir está o código python de exemplo para o arquivo 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"
    )

Atributos

A biblioteca C# usa o atributo SqlAttribute para declarar as associações SQL na função, que tem as seguintes propriedades:

Propriedade Attribute Description
CommandText Obrigatório. O comando de consulta Transact-SQL ou o nome do procedimento armazenado executado pela associação.
ConnectionStringSetting Obrigatório. O nome de uma configuração de aplicativo que contém a cadeia de conexão para o banco de dados no qual a consulta ou o procedimento armazenado está sendo executado. Esse valor não é a cadeia de conexão real e, em vez disso, deve ser resolvido para um nome de variável de ambiente.
Tipo de comando Obrigatório. Um valor CommandType , que é Text para uma consulta e StoredProcedure para um procedimento armazenado.
Parâmetros Opcional. Zero ou mais valores de parâmetro passados para o comando durante a execução como uma única cadeia de caracteres. Deve seguir o formato @param1=param1,@param2=param2. Nem o nome do parâmetro nem o valor do parâmetro podem conter uma vírgula (,) ou um sinal de igual (=).

Anotações

Na biblioteca de tempo de execução de funções Java, use a @SQLInput anotação (com.microsoft.azure.functions.sql.annotation.SQLInput) em parâmetros cujo valor viria do SQL do Azure. Esta anotação suporta os seguintes elementos:

Elemento Description
commandText Obrigatório. O comando de consulta Transact-SQL ou o nome do procedimento armazenado executado pela associação.
connectionStringSetting Obrigatório. O nome de uma configuração de aplicativo que contém a cadeia de conexão para o banco de dados no qual a consulta ou o procedimento armazenado está sendo executado. Esse valor não é a cadeia de conexão real e, em vez disso, deve ser resolvido para um nome de variável de ambiente.
commandType Obrigatório. Um valor CommandType , que é "Text" para uma consulta e "StoredProcedure" para um procedimento armazenado.
Designação Necessário. O nome exclusivo da ligação de função.
parameters Opcional. Zero ou mais valores de parâmetro passados para o comando durante a execução como uma única cadeia de caracteres. Deve seguir o formato @param1=param1,@param2=param2. Nem o nome do parâmetro nem o valor do parâmetro podem conter uma vírgula (,) ou um sinal de igual (=).

Configuração

A tabela a seguir explica as propriedades que você pode definir no options objeto passado para o input.sql() método.

Property Description
commandText Obrigatório. O comando de consulta Transact-SQL ou o nome do procedimento armazenado executado pela associação.
connectionStringSetting Obrigatório. O nome de uma configuração de aplicativo que contém a cadeia de conexão para o banco de dados no qual a consulta ou o procedimento armazenado está sendo executado. Esse valor não é a cadeia de conexão real e, em vez disso, deve ser resolvido para um nome de variável de ambiente. Palavras-chave opcionais no valor da cadeia de conexão estão disponíveis para refinar a conectividade de associações SQL.
commandType Obrigatório. Um valor CommandType , que é Text para uma consulta e StoredProcedure para um procedimento armazenado.
parameters Opcional. Zero ou mais valores de parâmetro passados para o comando durante a execução como uma única cadeia de caracteres. Deve seguir o formato @param1=param1,@param2=param2. Nem o nome do parâmetro nem o valor do parâmetro podem conter uma vírgula (,) ou um sinal de igual (=).

Configuração

A tabela a seguir explica as propriedades de configuração de vinculação definidas no arquivo function.json.

function.json propriedade Description
type Necessário. Deve ser definido como sql.
direção Obrigatório. Deve ser definido como in.
Designação Necessário. O nome da variável que representa a consulta resulta em código de função.
commandText Obrigatório. O comando de consulta Transact-SQL ou o nome do procedimento armazenado executado pela associação.
connectionStringSetting Obrigatório. O nome de uma configuração de aplicativo que contém a cadeia de conexão para o banco de dados no qual a consulta ou o procedimento armazenado está sendo executado. Esse valor não é a cadeia de conexão real e, em vez disso, deve ser resolvido para um nome de variável de ambiente. Palavras-chave opcionais no valor da cadeia de conexão estão disponíveis para refinar a conectividade de associações SQL.
commandType Obrigatório. Um valor CommandType , que é Text para uma consulta e StoredProcedure para um procedimento armazenado.
parameters Opcional. Zero ou mais valores de parâmetro passados para o comando durante a execução como uma única cadeia de caracteres. Deve seguir o formato @param1=param1,@param2=param2. Nem o nome do parâmetro nem o valor do parâmetro podem conter uma vírgula (,) ou um sinal de igual (=).

Quando estiver desenvolvendo localmente, adicione as configurações do aplicativo no arquivo local.settings.json na Values coleção.

Utilização

O construtor do atributo usa o texto do comando SQL, o tipo de comando, os parâmetros e o nome da configuração da cadeia de conexão. O comando pode ser uma consulta Transact-SQL (T-SQL) com o tipo System.Data.CommandType.Text de comando ou o nome do procedimento armazenado com o tipo System.Data.CommandType.StoredProcedurede comando. O nome da configuração da cadeia de conexão corresponde à configuração do aplicativo (em local.settings.json para desenvolvimento local) que contém a cadeia de conexão para a instância do SQL ou SQL Server do Azure.

As consultas executadas pela associação de entrada são parametrizadas em Microsoft.Data.SqlClient para reduzir o risco de injeção de SQL dos valores de parâmetro passados para a associação.

Se ocorrer uma exceção quando uma associação de entrada SQL for executada, o código da função não será executado. Isso pode resultar em um código de erro sendo retornado, como um gatilho HTTP retornando um código de erro 500.

Próximos passos