Associazione di input SQL di Azure per Funzioni di Azure
Quando viene eseguita una funzione, l'associazione di input SQL di Azure recupera i dati da un database e lo passa al parametro di input della funzione.
Per informazioni sui dettagli di impostazione e configurazione, vedere la panoramica.
Importante
Questo articolo usa schede per supportare le versioni diverse del modello di programmazione Node.js. Il modello v4 è disponibile a livello generale ed è progettato per offrire un'esperienza più flessibile e intuitiva per gli sviluppatori JavaScript e TypeScript. Per altre informazioni sul funzionamento del modello v4, vedere la guida per gli sviluppatori di Node.js per Funzioni di Azure. Altre informazioni sulle differenze tra i modelli v3 e v4 sono disponibili nella guida alla migrazione.
Esempi
È possibile creare una funzione C# usando una delle modalità C# seguenti:
- Modello di lavoro isolato: funzione C# compilata eseguita in un processo di lavoro isolato dal runtime. Il processo di lavoro isolato è necessario per supportare le funzioni C# in esecuzione in LTS e versioni non LTS .NET e .NET Framework.
- Modello in-process: funzione C# compilata eseguita nello stesso processo del runtime di Funzioni.
- Script C#: usato principalmente quando si creano funzioni C# nel portale di Azure.
Importante
Il supporto terminerà per il modello in-process il 10 novembre 2026. È consigliabile eseguire la migrazione delle app al modello di lavoro isolato per il supporto completo.
Altri esempi per l'associazione dell’input Azure SQL sono disponibili nel repository GitHub.
Questa sezione contiene gli esempi seguenti:
- Trigger HTTP, ottenere riga per ID dalla stringa di query
- Trigger HTTP, recupero di più righe dai dati di route
- Trigger HTTP, eliminare righe
Gli esempi fanno riferimento a una classe ToDoItem
e a una tabella di database corrispondente:
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, ottenere riga per ID dalla stringa di query
L'esempio seguente illustra una funzione C# che recupera un singolo record. La funzione viene attivata da una richiesta HTTP che usa una stringa di query per specificare l'ID. Tale ID viene usato per recuperare un record ToDoItem
con la query specificata.
Nota
Il parametro di stringa di query HTTP fa distinzione tra maiuscole e minuscole.
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, ottenere più righe dal parametro di route
L'esempio seguente illustra una funzione C# che recupera i documenti restituiti dalla query. La funzione viene attivata da una richiesta HTTP che usa i dati di route per specificare il valore di un parametro di query. Tale parametro viene usato per filtrare i ToDoItem
record nella query specificata.
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, eliminazione di righe
L'esempio seguente illustra una funzione C# che esegue una stored procedure con input dal parametro di query della richiesta HTTP.
La stored procedure dbo.DeleteToDo
deve essere creata nel database SQL. In questo esempio, la stored procedure elimina un singolo record o tutti i record a seconda del valore del parametro.
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);
}
}
}
Altri esempi per l'associazione dell’input Azure SQL sono disponibili nel repository GitHub.
Questa sezione contiene gli esempi seguenti:
- Trigger HTTP, ottenere più righe
- Trigger HTTP, ottenere riga per ID dalla stringa di query
- Trigger HTTP, eliminare righe
Gli esempi fanno riferimento a una ToDoItem
classe (in un file ToDoItem.java
separato ) e a una tabella di database corrispondente:
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, ottenere più righe
L'esempio seguente mostra un'associazione di input SQL in una funzione Java attivata da una richiesta HTTP e legge da una query e restituisce i risultati nella risposta 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, ottenere riga per ID dalla stringa di query
L'esempio seguente mostra un'associazione di input SQL in una funzione Java attivata da una richiesta HTTP e legge da una query filtrata da un parametro dalla stringa di query e restituisce la riga nella risposta 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, eliminazione di righe
L'esempio seguente illustra un'associazione di input SQL in una funzione Java attivata da una richiesta HTTP ed esegue una stored procedure con input dal parametro di query della richiesta HTTP.
La stored procedure dbo.DeleteToDo
deve essere creata nel database. In questo esempio, la stored procedure elimina un singolo record o tutti i record a seconda del valore del parametro.
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();
}
}
Altri esempi per l'associazione dell’input Azure SQL sono disponibili nel repository GitHub.
Questa sezione contiene gli esempi seguenti:
- Trigger HTTP, ottenere più righe
- Trigger HTTP, ottenere riga per ID dalla stringa di query
- Trigger HTTP, eliminare righe
Gli esempi fanno riferimento a una tabella di database:
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, ottenere più righe
L'esempio seguente mostra un'associazione di input SQL attivata da una richiesta HTTP e legge da una query e restituisce i risultati nella risposta 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, ottenere riga per ID dalla stringa di query
L'esempio seguente mostra un'associazione di input SQL attivata da una richiesta HTTP e legge da una query filtrata da un parametro dalla stringa di query e restituisce la riga nella risposta 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, eliminazione di righe
L'esempio seguente illustra un'associazione di input SQL attivata da una richiesta HTTP ed esegue una stored procedure con input dal parametro di query della richiesta HTTP.
La stored procedure dbo.DeleteToDo
deve essere creata nel database. In questo esempio, la stored procedure elimina un singolo record o tutti i record a seconda del valore del parametro.
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,
};
},
});
Altri esempi per l'associazione dell’input Azure SQL sono disponibili nel repository GitHub.
Questa sezione contiene gli esempi seguenti:
- Trigger HTTP, ottenere più righe
- Trigger HTTP, ottenere riga per ID dalla stringa di query
- Trigger HTTP, eliminare righe
Gli esempi fanno riferimento a una tabella di database:
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, ottenere più righe
L'esempio seguente mostra un'associazione di input SQL in un file function.json e una funzione di PowerShell attivata da una richiesta HTTP e legge da una query e restituisce i risultati nella risposta HTTP.
Di seguito sono riportati i dati di associazione nel file 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"
}
Queste proprietà sono descritte nella sezione configuration.
Di seguito è riportato il codice di PowerShell di esempio per la funzione nel run.ps1
file :
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, ottenere riga per ID dalla stringa di query
L'esempio seguente illustra un'associazione di input SQL in una funzione di PowerShell attivata da una richiesta HTTP e legge da una query filtrata in base a un parametro dalla stringa di query e restituisce la riga nella risposta HTTP.
Di seguito sono riportati i dati di associazione nel file 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"
}
Queste proprietà sono descritte nella sezione configuration.
Di seguito è riportato il codice di PowerShell di esempio per la funzione nel run.ps1
file :
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, eliminazione di righe
L'esempio seguente illustra un'associazione di input SQL in un file function.json e una funzione di PowerShell attivata da una richiesta HTTP ed esegue una stored procedure con input dal parametro di query della richiesta HTTP.
La stored procedure dbo.DeleteToDo
deve essere creata nel database. In questo esempio, la stored procedure elimina un singolo record o tutti i record a seconda del valore del parametro.
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"
}
Queste proprietà sono descritte nella sezione configuration.
Di seguito è riportato il codice di PowerShell di esempio per la funzione nel run.ps1
file :
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
})
Altri esempi per l'associazione dell’input Azure SQL sono disponibili nel repository GitHub.
Questa sezione contiene gli esempi seguenti:
- Trigger HTTP, ottenere più righe
- Trigger HTTP, ottenere riga per ID dalla stringa di query
- Trigger HTTP, eliminare righe
Gli esempi fanno riferimento a una tabella di database:
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, ottenere più righe
L'esempio seguente illustra un'associazione di input SQL in un file function.json e una funzione Python attivata da una richiesta HTTP e legge da una query e restituisce i risultati nella risposta HTTP.
Di seguito è riportato il codice Python di esempio per il file 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, ottenere riga per ID dalla stringa di query
L'esempio seguente mostra un'associazione di input SQL in una funzione Python attivata da una richiesta HTTP e legge da una query filtrata da un parametro dalla stringa di query e restituisce la riga nella risposta HTTP.
Di seguito è riportato il codice Python di esempio per il file 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, eliminazione di righe
L'esempio seguente mostra un'associazione di input SQL in un file function.json e una funzione Python attivata da una richiesta HTTP ed esegue una stored procedure con input dal parametro di query della richiesta HTTP.
La stored procedure dbo.DeleteToDo
deve essere creata nel database. In questo esempio, la stored procedure elimina un singolo record o tutti i record a seconda del valore del parametro.
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
Di seguito è riportato il codice Python di esempio per il file 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"
)
Attributi
La libreria C# usa l'attributo SqlAttribute per dichiarare le associazioni SQL nella funzione, con le proprietà seguenti:
Proprietà dell'attributo | Descrizione |
---|---|
CommandText | Obbligatorio. Comando di query Transact-SQL o nome della stored procedure eseguita dall'associazione. |
ConnectionStringSetting | Obbligatorio. Nome di un'impostazione dell'app contenente il stringa di connessione per il database in cui viene eseguita la query o la stored procedure. Questo valore non è il stringa di connessione effettivo e deve essere invece risolto in un nome di variabile di ambiente. |
CommandType | Obbligatorio. Valore CommandType , ovvero Text per una query e StoredProcedure per una stored procedure. |
Parametri | Facoltativo. Zero o più valori di parametro passati al comando durante l'esecuzione come singola stringa. Deve seguire il formato @param1=param1,@param2=param2 . Né il nome del parametro né il valore del parametro possono contenere una virgola (, ) o un segno di uguale (= ). |
Annotazioni
Nella libreria di runtime delle funzioni Java usare l'annotazione @SQLInput
(com.microsoft.azure.functions.sql.annotation.SQLInput
) nei parametri il cui valore proviene da Azure SQL. Questa annotazione supporta gli elementi seguenti:
Elemento | Descrizione |
---|---|
commandText | Obbligatorio. Comando di query Transact-SQL o nome della stored procedure eseguita dall'associazione. |
connectionStringSetting | Obbligatorio. Nome di un'impostazione dell'app contenente il stringa di connessione per il database in cui viene eseguita la query o la stored procedure. Questo valore non è il stringa di connessione effettivo e deve essere invece risolto in un nome di variabile di ambiente. |
commandType | Obbligatorio. Valore CommandType , ovvero "Text" per una query e "StoredProcedure" per una stored procedure. |
name | Obbligatorio. Nome univoco dell'associazione di funzioni. |
parameters | Facoltativo. Zero o più valori di parametro passati al comando durante l'esecuzione come singola stringa. Deve seguire il formato @param1=param1,@param2=param2 . Né il nome del parametro né il valore del parametro possono contenere una virgola (, ) o un segno di uguale (= ). |
Impostazione
Nella tabella seguente vengono illustrate le proprietà che è possibile impostare sull'oggetto options
passato al input.sql()
metodo .
Proprietà | Descrizione |
---|---|
commandText | Obbligatorio. Comando di query Transact-SQL o nome della stored procedure eseguita dall'associazione. |
connectionStringSetting | Obbligatorio. Nome di un'impostazione dell'app contenente il stringa di connessione per il database in cui viene eseguita la query o la stored procedure. Questo valore non è il stringa di connessione effettivo e deve essere invece risolto in un nome di variabile di ambiente. Le parole chiave facoltative nel valore stringa di connessione sono disponibili per perfezionare la connettività delle associazioni SQL. |
commandType | Obbligatorio. Valore CommandType , ovvero Text per una query e StoredProcedure per una stored procedure. |
parameters | Facoltativo. Zero o più valori di parametro passati al comando durante l'esecuzione come singola stringa. Deve seguire il formato @param1=param1,@param2=param2 . Né il nome del parametro né il valore del parametro possono contenere una virgola (, ) o un segno di uguale (= ). |
Impostazione
Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json.
Proprietà di function.json | Descrizione |
---|---|
type | Obbligatorio. Deve essere impostato su sql . |
direction | Obbligatorio. Deve essere impostato su in . |
name | Obbligatorio. Nome della variabile che rappresenta i risultati della query nel codice della funzione. |
commandText | Obbligatorio. Comando di query Transact-SQL o nome della stored procedure eseguita dall'associazione. |
connectionStringSetting | Obbligatorio. Nome di un'impostazione dell'app contenente il stringa di connessione per il database in cui viene eseguita la query o la stored procedure. Questo valore non è il stringa di connessione effettivo e deve essere invece risolto in un nome di variabile di ambiente. Le parole chiave facoltative nel valore stringa di connessione sono disponibili per perfezionare la connettività delle associazioni SQL. |
commandType | Obbligatorio. Valore CommandType , ovvero Text per una query e StoredProcedure per una stored procedure. |
parameters | Facoltativo. Zero o più valori di parametro passati al comando durante l'esecuzione come singola stringa. Deve seguire il formato @param1=param1,@param2=param2 . Né il nome del parametro né il valore del parametro possono contenere una virgola (, ) o un segno di uguale (= ). |
Quando si sviluppa in locale, aggiungere le impostazioni dell'applicazione nel file local.settings.json nella Values
raccolta.
Utilizzo
Il costruttore dell'attributo accetta il testo del comando SQL, il tipo di comando, i parametri e il nome dell'impostazione stringa di connessione. Il comando può essere una query Transact-SQL (T-SQL) con il tipo di System.Data.CommandType.Text
comando o il nome della stored procedure con il tipo di System.Data.CommandType.StoredProcedure
comando . Il nome dell'impostazione stringa di connessione corrisponde all'impostazione dell'applicazione (in local.settings.json
per lo sviluppo locale) che contiene il stringa di connessione all'istanza di SQL o SQL Server di Azure.
Le query eseguite dall'associazione di input vengono parametrizzate in Microsoft.Data.SqlClient per ridurre il rischio di inserimento SQL dai valori dei parametri passati nell'associazione.
Se si verifica un'eccezione quando viene eseguita un'associazione di input SQL, il codice della funzione non verrà eseguito. Ciò può comportare la restituzione di un codice di errore, ad esempio un trigger HTTP che restituisce un codice di errore 500.