Pengikatan input Azure SQL untuk Azure Functions

Saat fungsi berjalan, pengikatan input Azure SQL mengambil data dari database dan meneruskannya ke parameter input fungsi tersebut.

Untuk informasi tentang pengaturan dan detail konfigurasi, lihat gambaran umum.

Penting

Artikel ini menggunakan tab untuk mendukung beberapa versi model pemrograman Node.js. Model v4 umumnya tersedia dan dirancang untuk memiliki pengalaman yang lebih fleksibel dan intuitif untuk pengembang JavaScript dan TypeScript. Untuk detail selengkapnya tentang cara kerja model v4, lihat panduan pengembang Node.js Azure Functions. Untuk mempelajari selengkapnya tentang perbedaan antara v3 dan v4, lihat panduan migrasi.

Contoh

Fungsi C# dapat dibuat dengan menggunakan salah satu mode C# berikut:

  • Model pekerja terisolasi: Fungsi C# terkompilasi yang berjalan dalam proses pekerja yang terisolasi dari runtime. Proses pekerja terisolasi diperlukan untuk mendukung fungsi C# yang berjalan pada versi LTS dan non-LTS .NET dan .NET Framework.
  • Model dalam proses: Fungsi C# yang dikompilasi yang berjalan dalam proses yang sama dengan runtime Functions.
  • Skrip C#: Digunakan terutama saat Anda membuat fungsi C# di portal Azure.

Penting

Dukungan akan berakhir untuk model dalam proses pada 10 November 2026. Kami sangat menyarankan Agar Anda memigrasikan aplikasi Anda ke model pekerja yang terisolasi untuk dukungan penuh.

Contoh lainnya untuk pengikatan input Azure SQL tersedia di repositori GitHub.

Bagian ini berisi contoh-contoh berikut:

Contoh mengacu pada ToDoItem kelas dan tabel database yang sesuai:

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

Pemicu HTTP, dapatkan baris berdasarkan ID dari string kueri

Contoh berikut memperlihatkan fungsi C# yang mengambil satu catatan. Fungsi ini dipicu oleh permintaan HTTP yang menggunakan string kueri untuk menentukan ID. ID tersebut digunakan untuk mengambil ToDoItem catatan dengan kueri yang ditentukan.

Catatan

Parameter string kueri HTTP peka huruf besar/kecil.

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

Pemicu HTTP, dapatkan beberapa baris dari parameter rute

Contoh berikut memperlihatkan fungsi C# yang mengambil dokumen yang dikembalikan oleh kueri. Fungsi ini dipicu oleh permintaan HTTP yang menggunakan data rute untuk menentukan nilai parameter kueri. Parameter tersebut digunakan untuk memfilter ToDoItem catatan dalam kueri yang ditentukan.

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

Pemicu HTTP, hapus baris

Contoh berikut menunjukkan fungsi C# yang menjalankan prosedur tersimpan dengan input dari parameter kueri permintaan HTTP.

Prosedur tersimpan dbo.DeleteToDo harus dibuat di database SQL. Dalam contoh ini, prosedur tersimpan menghapus satu rekaman atau semua rekaman tergantung pada nilai parameter.

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

Contoh lainnya untuk pengikatan input Azure SQL tersedia di repositori GitHub.

Bagian ini berisi contoh-contoh berikut:

Contoh merujuk ke ToDoItem kelas (dalam file ToDoItem.javaterpisah ) dan tabel database yang sesuai:

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

Pemicu HTTP, dapatkan beberapa baris

Contoh berikut menunjukkan pengikatan input SQL dalam fungsi Java yang dipicu oleh permintaan HTTP dan dibaca dari kueri dan mengembalikan hasilnya dalam respons 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();
    }
}

Pemicu HTTP, dapatkan baris berdasarkan ID dari string kueri

Contoh berikut menunjukkan pengikatan input SQL dalam fungsi Java yang dipicu oleh permintaan HTTP dan dibaca dari kueri yang difilter oleh parameter dari string kueri dan mengembalikan baris dalam respons 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();
    }
}

Pemicu HTTP, hapus baris

Contoh berikut menunjukkan pengikatan input SQL dalam fungsi Java yang dipicu oleh permintaan HTTP dan menjalankan prosedur tersimpan dengan input dari parameter kueri permintaan HTTP.

Prosedur tersimpan dbo.DeleteToDo harus dibuat di database. Dalam contoh ini, prosedur tersimpan menghapus satu rekaman atau semua rekaman tergantung pada nilai parameter.

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

Contoh lainnya untuk pengikatan input Azure SQL tersedia di repositori GitHub.

Bagian ini berisi contoh-contoh berikut:

Contoh merujuk ke tabel 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
);

Pemicu HTTP, dapatkan beberapa baris

Contoh berikut menunjukkan pengikatan input SQL yang dipicu oleh permintaan HTTP dan dibaca dari kueri dan mengembalikan hasilnya dalam respons 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,
        };
    },
});

Pemicu HTTP, dapatkan baris berdasarkan ID dari string kueri

Contoh berikut menunjukkan pengikatan input SQL yang dipicu oleh permintaan HTTP dan dibaca dari kueri yang difilter oleh parameter dari string kueri dan mengembalikan baris dalam respons 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,
        };
    },
});

Pemicu HTTP, hapus baris

Contoh berikut menunjukkan pengikatan input SQL yang dipicu oleh permintaan HTTP dan menjalankan prosedur tersimpan dengan input dari parameter kueri permintaan HTTP.

Prosedur tersimpan dbo.DeleteToDo harus dibuat di database. Dalam contoh ini, prosedur tersimpan menghapus satu rekaman atau semua rekaman tergantung pada nilai parameter.

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

Contoh lainnya untuk pengikatan input Azure SQL tersedia di repositori GitHub.

Bagian ini berisi contoh-contoh berikut:

Contoh merujuk ke tabel 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
);

Pemicu HTTP, dapatkan beberapa baris

Contoh berikut menunjukkan pengikatan input SQL dalam file function.json dan fungsi PowerShell yang dipicu oleh permintaan HTTP dan dibaca dari kueri dan mengembalikan hasilnya dalam respons HTTP.

Berikut ini adalah mengikat data dalam 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"
}

Bagian konfigurasi menjelaskan properti ini.

Berikut ini adalah contoh kode PowerShell untuk fungsi dalam 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
})

Pemicu HTTP, dapatkan baris berdasarkan ID dari string kueri

Contoh berikut menunjukkan pengikatan input SQL dalam fungsi PowerShell yang dipicu oleh permintaan HTTP dan dibaca dari kueri yang difilter oleh parameter dari string kueri dan mengembalikan baris dalam respons HTTP.

Berikut ini adalah mengikat data dalam 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"
}

Bagian konfigurasi menjelaskan properti ini.

Berikut ini adalah contoh kode PowerShell untuk fungsi dalam 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
})

Pemicu HTTP, hapus baris

Contoh berikut menunjukkan pengikatan input SQL dalam file function.json dan fungsi PowerShell yang dipicu oleh permintaan HTTP dan menjalankan prosedur tersimpan dengan input dari parameter kueri permintaan HTTP.

Prosedur tersimpan dbo.DeleteToDo harus dibuat di database. Dalam contoh ini, prosedur tersimpan menghapus satu rekaman atau semua rekaman tergantung pada nilai parameter.

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

Bagian konfigurasi menjelaskan properti ini.

Berikut ini adalah contoh kode PowerShell untuk fungsi dalam 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
})

Contoh lainnya untuk pengikatan input Azure SQL tersedia di repositori GitHub.

Bagian ini berisi contoh-contoh berikut:

Contoh merujuk ke tabel 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
);

Pemicu HTTP, dapatkan beberapa baris

Contoh berikut menunjukkan pengikatan input SQL dalam file function.json dan fungsi Python yang dipicu oleh permintaan HTTP dan membaca dari kueri dan mengembalikan hasilnya dalam respons HTTP.

Berikut ini adalah mengikat data dalam file 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"
}

Bagian konfigurasi menjelaskan properti ini.

Berikut ini adalah sampel kode 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"
    ) 

Pemicu HTTP, dapatkan baris berdasarkan ID dari string kueri

Contoh berikut menunjukkan pengikatan input SQL dalam fungsi Python yang dipicu oleh permintaan HTTP dan dibaca dari kueri yang difilter oleh parameter dari string kueri dan mengembalikan baris dalam respons HTTP.

Berikut ini adalah mengikat data dalam file 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"
}

Bagian konfigurasi menjelaskan properti ini.

Berikut ini adalah sampel kode 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"
    ) 

Pemicu HTTP, hapus baris

Contoh berikut menunjukkan pengikatan input SQL dalam file function.json dan fungsi Python yang dipicu oleh permintaan HTTP dan menjalankan prosedur tersimpan dengan input dari parameter kueri permintaan HTTP.

Prosedur tersimpan dbo.DeleteToDo harus dibuat di database. Dalam contoh ini, prosedur tersimpan menghapus satu rekaman atau semua rekaman tergantung pada nilai parameter.

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

Bagian konfigurasi menjelaskan properti ini.

Berikut ini adalah sampel kode 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"
    ) 

Atribut

Pustaka C# menggunakan atribut SqlAttribute untuk mendeklarasikan pengikatan SQL pada fungsi , yang memiliki properti berikut:

Properti atribut Deskripsi
CommandText Harus diisi. Perintah kueri Transact-SQL atau nama prosedur tersimpan yang dijalankan oleh pengikatan.
ConnectionStringSetting Harus diisi. Nama pengaturan aplikasi yang berisi string koneksi untuk database tempat kueri atau prosedur tersimpan dijalankan. Nilai ini bukan string koneksi yang sebenarnya dan harus diselesaikan ke nama variabel lingkungan.
CommandType Harus diisi. Nilai CommandType, yaitu Teks untuk kueri dan StoredProcedure untuk prosedur tersimpan.
Parameter Opsional. Nilai parameter nol atau lebih yang diteruskan ke perintah selama eksekusi sebagai string tunggal. Harus mengikuti format @param1=param1,@param2=param2. Baik nama parameter maupun nilai parameter tidak dapat berisi tanda koma (,) atau sama dengan (=).

Anotasi

Di pustaka runtime fungsi Java, gunakan @SQLInput anotasi (com.microsoft.azure.functions.sql.annotation.SQLInput) pada parameter yang nilainya akan berasal dari Azure SQL. Anotasi ini mendukung elemen berikut:

Elemen Deskripsi
commandText Harus diisi. Perintah kueri Transact-SQL atau nama prosedur tersimpan yang dijalankan oleh pengikatan.
connectionStringSetting Harus diisi. Nama pengaturan aplikasi yang berisi string koneksi untuk database tempat kueri atau prosedur tersimpan dijalankan. Nilai ini bukan string koneksi yang sebenarnya dan harus diselesaikan ke nama variabel lingkungan.
commandType Harus diisi. Nilai CommandType , yaitu "Teks" untuk kueri dan "StoredProcedure" untuk prosedur tersimpan.
nama Harus diisi. Nama unik pengikatan fungsi.
parameter Opsional. Nilai parameter nol atau lebih yang diteruskan ke perintah selama eksekusi sebagai string tunggal. Harus mengikuti format @param1=param1,@param2=param2. Baik nama parameter maupun nilai parameter tidak dapat berisi tanda koma (,) atau sama dengan (=).

Konfigurasi

Tabel berikut menjelaskan properti yang bisa Anda atur pada objek yang options diteruskan ke input.sql() metode .

Properti Deskripsi
commandText Harus diisi. Perintah kueri Transact-SQL atau nama prosedur tersimpan yang dijalankan oleh pengikatan.
connectionStringSetting Harus diisi. Nama pengaturan aplikasi yang berisi string koneksi untuk database tempat kueri atau prosedur tersimpan dijalankan. Nilai ini bukan string koneksi yang sebenarnya dan harus diselesaikan ke nama variabel lingkungan. Kata kunci opsional dalam nilai string koneksi tersedia untuk menyempurnakan konektivitas pengikatan SQL.
commandType Harus diisi. Nilai CommandType, yaitu Teks untuk kueri dan StoredProcedure untuk prosedur tersimpan.
parameter Opsional. Nilai parameter nol atau lebih yang diteruskan ke perintah selama eksekusi sebagai string tunggal. Harus mengikuti format @param1=param1,@param2=param2. Baik nama parameter maupun nilai parameter tidak dapat berisi tanda koma (,) atau sama dengan (=).

Konfigurasi

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Harus diisi. Harus diatur ke sql.
arah Harus diisi. Harus diatur ke in.
nama Harus diisi. Nama variabel yang mewakili kueri dalam kode fungsi.
commandText Harus diisi. Perintah kueri Transact-SQL atau nama prosedur tersimpan yang dijalankan oleh pengikatan.
connectionStringSetting Harus diisi. Nama pengaturan aplikasi yang berisi string koneksi untuk database tempat kueri atau prosedur tersimpan dijalankan. Nilai ini bukan string koneksi yang sebenarnya dan harus diselesaikan ke nama variabel lingkungan. Kata kunci opsional dalam nilai string koneksi tersedia untuk menyempurnakan konektivitas pengikatan SQL.
commandType Harus diisi. Nilai CommandType, yaitu Teks untuk kueri dan StoredProcedure untuk prosedur tersimpan.
parameter Opsional. Nilai parameter nol atau lebih yang diteruskan ke perintah selama eksekusi sebagai string tunggal. Harus mengikuti format @param1=param1,@param2=param2. Baik nama parameter maupun nilai parameter tidak dapat berisi tanda koma (,) atau sama dengan (=).

Ketika Anda mengembangkan secara lokal, tambahkan pengaturan aplikasi di file local.settings.json dalam koleksi Values.

Penggunaan

Konstruktor atribut mengambil teks perintah SQL, tipe perintah, parameter, dan nama pengaturan string koneksi. Perintah dapat menjadi kueri Transact-SQL (T-SQL) dengan tipe perintah System.Data.CommandType.Text atau nama prosedur yang disimpan dengan tipe perintah System.Data.CommandType.StoredProcedure. Nama pengaturan string koneksi sesuai dengan pengaturan aplikasi (di local.settings.json untuk pengembangan lokal) yang berisi string koneksi ke instans Azure SQL atau SQL Server.

Kueri yang dijalankan oleh pengikatan input diparameterkan di Microsoft.Data.SqlClient untuk mengurangi risiko injeksi SQL dari nilai parameter yang diteruskan ke pengikatan.

Jika pengecualian terjadi ketika pengikatan input SQL dijalankan, kode fungsi tidak akan dijalankan. Ini dapat mengakibatkan kode kesalahan dikembalikan, seperti pemicu HTTP yang mengembalikan kode kesalahan 500.

Langkah berikutnya