Azure İşlevleri için Azure SQL çıkış bağlaması

Azure SQL çıkış bağlaması bir veritabanına yazmanızı sağlar.

Kurulum ve yapılandırma ayrıntıları hakkında bilgi için genel bakışa bakın.

Önemli

Bu makalede, Node.js programlama modelinin birden çok sürümünü desteklemek için sekmeler kullanılır. Genel kullanıma sunulan v4 modeli, JavaScript ve TypeScript geliştiricileri için daha esnek ve sezgisel bir deneyime sahip olacak şekilde tasarlanmıştır. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.

Örnekler

C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:

  • Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. LTS ve .NET ve .NET Framework dışındaki sürümlerde çalışan C# işlevlerini desteklemek için yalıtılmış çalışan işlemi gereklidir.
  • İşlem içi model: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi.
  • C# betiği: Öncelikle Azure portalında C# işlevleri oluşturduğunuzda kullanılır.

Önemli

İşlem içi model desteği 10 Kasım 2026'da sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.

GitHub deposunda Azure SQL çıkış bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir ToDoItem sınıfa ve buna karşılık gelen bir veritabanı tablosuna başvurur:

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

Örneklerimizde birden çok çıkış bağlaması döndürmek için özel bir dönüş türü oluşturacağız:

public static class OutputType
{
    [SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
    public ToDoItem ToDoItem { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}

HTTP tetikleyicisi, bir kayıt yazma

Aşağıdaki örnekte, BIR HTTP POST isteğinde JSON gövdesi olarak sağlanan verileri kullanarak veritabanına kayıt ekleyen bir C# işlevi gösterilmektedir. Dönüş nesnesi, hem HTTP yanıtını OutputType hem de SQL çıkış bağlamasını işlemek için oluşturduğumuz sınıftır.

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace AzureSQL.ToDo
{
    public static class PostToDo
    {
        // create a new ToDoItem from body object
        // uses output binding to insert new item into ToDo table
        [FunctionName("PostToDo")]
        public static async Task<OutputType> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "PostFunction")] HttpRequestData req,
                FunctionContext executionContext)
        {
            var logger = executionContext.GetLogger("PostToDo");
            logger.LogInformation("C# HTTP trigger function processed a request.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            ToDoItem toDoItem = JsonConvert.DeserializeObject<ToDoItem>(requestBody);

            // generate a new id for the todo item
            toDoItem.Id = Guid.NewGuid();

            // set Url from env variable ToDoUri
            toDoItem.url = Environment.GetEnvironmentVariable("ToDoUri")+"?id="+toDoItem.Id.ToString();

            // if completed is not provided, default to false
            if (toDoItem.completed == null)
            {
                toDoItem.completed = false;
            }

            return new OutputType()
            {
                ToDoItem = toDoItem,
                HttpResponse = req.CreateResponse(System.Net.HttpStatusCode.Created)
            }
        }
    }

    public static class OutputType
    {
        [SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
        public ToDoItem ToDoItem { get; set; }

        public HttpResponseData HttpResponse { get; set; }
    }
}

HTTP tetikleyicisi, iki tabloya yazma

Aşağıdaki örnekte, bir HTTP POST isteğinde JSON gövdesi ve birden çok çıkış bağlaması olarak sağlanan verileri kullanarak iki farklı tablodaki (dbo.ToDo ve dbo.RequestLog) bir veritabanına kayıt ekleyen bir C# işlevi gösterilmektedir.

CREATE TABLE dbo.RequestLog (
    Id int identity(1,1) primary key,
    RequestTimeStamp datetime2 not null,
    ItemCount int not null
)

Ek çıkış bağlaması kullanmak için RequestLog sınıfımızı ekler ve değiştiririz OutputType :

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace AzureSQL.ToDo
{
    public static class PostToDo
    {
        // create a new ToDoItem from body object
        // uses output binding to insert new item into ToDo table
        [FunctionName("PostToDo")]
        public static async Task<OutputType> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "PostFunction")] HttpRequestData req,
                FunctionContext executionContext)
        {
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            ToDoItem toDoItem = JsonConvert.DeserializeObject<ToDoItem>(requestBody);

            // generate a new id for the todo item
            toDoItem.Id = Guid.NewGuid();

            // set Url from env variable ToDoUri
            toDoItem.url = Environment.GetEnvironmentVariable("ToDoUri")+"?id="+toDoItem.Id.ToString();

            // if completed is not provided, default to false
            if (toDoItem.completed == null)
            {
                toDoItem.completed = false;
            }

            requestLog = new RequestLog();
            requestLog.RequestTimeStamp = DateTime.Now;
            requestLog.ItemCount = 1;

            return new OutputType()
            {
                ToDoItem = toDoItem,
                RequestLog = requestLog,
                HttpResponse = req.CreateResponse(System.Net.HttpStatusCode.Created)
            }
        }
    }

    public class RequestLog {
        public DateTime RequestTimeStamp { get; set; }
        public int ItemCount { get; set; }
    }

    public static class OutputType
    {
        [SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
        public ToDoItem ToDoItem { get; set; }

        [SqlOutput("dbo.RequestLog", connectionStringSetting: "SqlConnectionString")]
        public RequestLog RequestLog { get; set; }

        public HttpResponseData HttpResponse { get; set; }
    }

}

GitHub deposunda Azure SQL çıkış bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir sınıfa (ayrı bir ToDoItem dosyada ToDoItem.java) ve buna karşılık gelen bir veritabanı tablosuna başvurur:

package com.function;
import java.util.UUID;

public class ToDoItem {
    public UUID Id;
    public int order;
    public String title;
    public String url;
    public boolean completed;

    public ToDoItem() {
    }

    public ToDoItem(UUID Id, int order, String title, String url, boolean completed) {
        this.Id = Id;
        this.order = order;
        this.title = title;
        this.url = url;
        this.completed = completed;
    }
}
CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

HTTP tetikleyicisi, tabloya kayıt yazma

Aşağıdaki örnekte, HTTP POST isteğinde JSON gövdesi olarak sağlanan verileri kullanarak tabloya kayıt ekleyen bir Java işlevindeki SQL çıkış bağlaması gösterilmektedir. İşlev, JSON gövdesini ayrıştırmak için com.google.code.gson kitaplığına ek bir bağımlılık alır.

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>
package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.sql.annotation.SQLOutput;
import com.google.gson.Gson;

import java.util.Optional;

public class PostToDo {
    @FunctionName("PostToDo")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @SQLOutput(
                name = "toDoItem",
                commandText = "dbo.ToDo",
                connectionStringSetting = "SqlConnectionString")
                OutputBinding<ToDoItem> output) {
        String json = request.getBody().get();
        Gson gson = new Gson();
        ToDoItem newToDo = gson.fromJson(json, ToDoItem.class);

        newToDo.Id = UUID.randomUUID();
        output.setValue(newToDo);

        return request.createResponseBuilder(HttpStatus.CREATED).header("Content-Type", "application/json").body(output).build();
    }
}

HTTP tetikleyicisi, iki tabloya yazma

Aşağıdaki örnekte, bir HTTP POST isteğinde JSON gövdesi ve birden çok çıkış bağlaması olarak sağlanan verileri kullanarak iki farklı tablodaki (dbo.ToDo ve dbo.RequestLog) bir veritabanına kayıt ekleyen bir JavaS işlevindeki SQL çıkış bağlaması gösterilmektedir. İşlev, JSON gövdesini ayrıştırmak için com.google.code.gson kitaplığına ek bir bağımlılık alır.

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

İkinci tablo olan dbo.RequestLog, aşağıdaki tanıma karşılık gelir:

CREATE TABLE dbo.RequestLog (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    RequestTimeStamp DATETIME2 NOT NULL DEFAULT(GETDATE()),
    ItemCount INT NOT NULL
)

ve içindeki RequestLog.javaJava sınıfı:

package com.function;

import java.util.Date;

public class RequestLog {
    public int Id;
    public Date RequestTimeStamp;
    public int ItemCount;

    public RequestLog() {
    }

    public RequestLog(int Id, Date RequestTimeStamp, int ItemCount) {
        this.Id = Id;
        this.RequestTimeStamp = RequestTimeStamp;
        this.ItemCount = ItemCount;
    }
}
package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.sql.annotation.SQLOutput;
import com.google.gson.Gson;

import java.util.Optional;

public class PostToDoWithLog {
    @FunctionName("PostToDoWithLog")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @SQLOutput(
                name = "toDoItem",
                commandText = "dbo.ToDo",
                connectionStringSetting = "SqlConnectionString")
                OutputBinding<ToDoItem> output,
            @SQLOutput(
                name = "requestLog",
                commandText = "dbo.RequestLog",
                connectionStringSetting = "SqlConnectionString")
                OutputBinding<RequestLog> outputLog,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        String json = request.getBody().get();
        Gson gson = new Gson();
        ToDoItem newToDo = gson.fromJson(json, ToDoItem.class);
        newToDo.Id = UUID.randomUUID();
        output.setValue(newToDo);

        RequestLog newLog = new RequestLog();
        newLog.ItemCount = 1;
        outputLog.setValue(newLog);

        return request.createResponseBuilder(HttpStatus.CREATED).header("Content-Type", "application/json").body(output).build();
    }
}

GitHub deposunda Azure SQL çıkış bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir veritabanı tablosuna başvurur:

CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

HTTP tetikleyicisi, tabloya kayıt yazma

Aşağıdaki örnekte, BIR HTTP POST isteğinde JSON gövdesi olarak sağlanan verileri kullanarak bir tabloya kayıt ekleyen bir SQL çıkış bağlaması gösterilmektedir.

import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';

const sqlOutput = output.sql({
    commandText: 'dbo.ToDo',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL output binding function processed a request.');

    const body = await request.json();
    context.extraOutputs.set(sqlOutput, body);
    return { status: 201 };
}

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [sqlOutput],
    handler: httpTrigger1,
});
const { app, output } = require('@azure/functions');

const sqlOutput = output.sql({
    commandText: 'dbo.ToDo',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [sqlOutput],
    handler: async (request, context) => {
        context.log('HTTP trigger and SQL output binding function processed a request.');

        const body = await request.json();
        context.extraOutputs.set(sqlOutput, body);
        return { status: 201 };
    },
});

HTTP tetikleyicisi, iki tabloya yazma

Aşağıdaki örnekte, BIR HTTP POST isteğinde JSON gövdesi ve birden çok çıkış bağlaması olarak sağlanan verileri kullanarak iki farklı tablodaki (dbo.ToDo ve dbo.RequestLog) bir veritabanına kayıt ekleyen bir SQL çıkış bağlaması gösterilmektedir.

İkinci tablo olan dbo.RequestLog, aşağıdaki tanıma karşılık gelir:

CREATE TABLE dbo.RequestLog (
    Id int identity(1,1) primary key,
    RequestTimeStamp datetime2 not null,
    ItemCount int not null
)
import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';

const sqlTodoOutput = output.sql({
    commandText: 'dbo.ToDo',
    connectionStringSetting: 'SqlConnectionString',
});

const sqlRequestLogOutput = output.sql({
    commandText: 'dbo.RequestLog',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL output binding function processed a request.');

    const newLog = {
        RequestTimeStamp: Date.now(),
        ItemCount: 1,
    };
    context.extraOutputs.set(sqlRequestLogOutput, newLog);

    const body = await request.json();
    context.extraOutputs.set(sqlTodoOutput, body);

    return { status: 201 };
}

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [sqlTodoOutput, sqlRequestLogOutput],
    handler: httpTrigger1,
});
const { app, output } = require('@azure/functions');

const sqlTodoOutput = output.sql({
    commandText: 'dbo.ToDo',
    connectionStringSetting: 'SqlConnectionString',
});

const sqlRequestLogOutput = output.sql({
    commandText: 'dbo.RequestLog',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [sqlTodoOutput, sqlRequestLogOutput],
    handler: async (request, context) => {
        context.log('HTTP trigger and SQL output binding function processed a request.');

        const newLog = {
            RequestTimeStamp: Date.now(),
            ItemCount: 1,
        };
        context.extraOutputs.set(sqlRequestLogOutput, newLog);

        const body = await request.json();
        context.extraOutputs.set(sqlTodoOutput, body);

        return { status: 201 };
    },
});

GitHub deposunda Azure SQL çıkış bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir veritabanı tablosuna başvurur:

CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

HTTP tetikleyicisi, tabloya kayıt yazma

Aşağıdaki örnekte, bir function.json dosyasındaki SQL çıkış bağlaması ve HTTP POST isteğinde JSON gövdesi olarak sağlanan verileri kullanarak bir tabloya kayıt ekleyen bir PowerShell işlevi gösterilmektedir.

Function.json dosyasındaki verileri bağlama aşağıdadır:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
}

Yapılandırma bölümünde bu özellikler açıklanır.

Aşağıda, dosyadaki işlev için örnek PowerShell kodu verilmiştir run.ps1 :


```powershell
using namespace System.Net

param($Request)

Write-Host "PowerShell function with SQL Output Binding processed a request."

# Update req_body with the body of the request
$req_body = $Request.Body

# Assign the value we want to pass to the SQL Output binding. 
# The -Name value corresponds to the name property in the function.json for the binding
Push-OutputBinding -Name todoItems -Value $req_body

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $req_body
})

HTTP tetikleyicisi, iki tabloya yazma

Aşağıdaki örnekte, bir function.json dosyasındaki SQL çıkış bağlaması ve HTTP POST isteğinde JSON gövdesi ve birden çok çıkış bağlaması olarak sağlanan verileri kullanarak iki farklı tablodaki (dbo.ToDo ve dbo.RequestLog) bir veritabanına kayıt ekleyen bir PowerShell işlevi gösterilmektedir.

İkinci tablo olan dbo.RequestLog, aşağıdaki tanıma karşılık gelir:

CREATE TABLE dbo.RequestLog (
    Id int identity(1,1) primary key,
    RequestTimeStamp datetime2 not null,
    ItemCount int not null
)

Function.json dosyasındaki verileri bağlama aşağıdadır:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
},
{
    "name": "requestLog",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.RequestLog",
    "connectionStringSetting": "SqlConnectionString"
}

Yapılandırma bölümünde bu özellikler açıklanır.

Aşağıda, dosyadaki işlev için örnek PowerShell kodu verilmiştir run.ps1 :

using namespace System.Net

param($Request)

Write-Host "PowerShell function with SQL Output Binding processed a request."

# Update req_body with the body of the request
$req_body = $Request.Body
$new_log = @{
    RequestTimeStamp = [DateTime]::Now
    ItemCount = 1
}

Push-OutputBinding -Name todoItems -Value $req_body
Push-OutputBinding -Name requestLog -Value $new_log

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $req_body
})

GitHub deposunda Azure SQL çıkış bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir veritabanı tablosuna başvurur:

CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

HTTP tetikleyicisi, tabloya kayıt yazma

Aşağıdaki örnekte, bir function.json dosyasındaki SQL çıkış bağlaması ve HTTP POST isteğinde JSON gövdesi olarak sağlanan verileri kullanarak tabloya kayıt ekleyen bir Python işlevi gösterilmektedir.

Function.json dosyasındaki verileri bağlama aşağıdadır:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "$return"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
}

Yapılandırma bölümünde bu özellikler açıklanır.

Aşağıda örnek Python kodu verilmiştir:

import logging
import azure.functions as func


def main(req: func.HttpRequest, todoItems: func.Out[func.SqlRow]) -> func.HttpResponse:
    logging.info('Python HTTP trigger and SQL output binding function processed a request.')

    try:
        req_body = req.get_json()
        rows = func.SqlRowList(map(lambda r: func.SqlRow.from_dict(r), req_body))
    except ValueError:
        pass

    if req_body:
        todoItems.set(rows)
        return func.HttpResponse(
            todoItems.to_json(),
            status_code=201,
            mimetype="application/json"
        )
    else:
        return func.HttpResponse(
            "Error accessing request body",
            status_code=400
        )

HTTP tetikleyicisi, iki tabloya yazma

Aşağıdaki örnekte, bir function.json dosyasındaki SQL çıkış bağlaması ve HTTP POST isteğinde JSON gövdesi ve birden çok çıkış bağlaması olarak sağlanan verileri kullanarak iki farklı tablodaki (dbo.ToDo ve dbo.RequestLog) bir veritabanına kayıt ekleyen bir Python işlevi gösterilmektedir.

İkinci tablo olan dbo.RequestLog, aşağıdaki tanıma karşılık gelir:

CREATE TABLE dbo.RequestLog (
    Id int identity(1,1) primary key,
    RequestTimeStamp datetime2 not null,
    ItemCount int not null
)

Function.json dosyasındaki verileri bağlama aşağıdadır:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "$return"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
},
{
    "name": "requestLog",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.RequestLog",
    "connectionStringSetting": "SqlConnectionString"
}

Yapılandırma bölümünde bu özellikler açıklanır.

Aşağıda örnek Python kodu verilmiştir:

import logging
from datetime import datetime
import azure.functions as func


def main(req: func.HttpRequest, todoItems: func.Out[func.SqlRow], requestLog: func.Out[func.SqlRow]) -> func.HttpResponse:
    logging.info('Python HTTP trigger and SQL output binding function processed a request.')

    try:
        req_body = req.get_json()
        rows = func.SqlRowList(map(lambda r: func.SqlRow.from_dict(r), req_body))
    except ValueError:
        pass

    requestLog.set(func.SqlRow({
        "RequestTimeStamp": datetime.now(),
        "ItemCount": 1
    }))

    if req_body:
        todoItems.set(rows)
        return func.HttpResponse(
            todoItems.to_json(),
            status_code=201,
            mimetype="application/json"
        )
    else:
        return func.HttpResponse(
            "Error accessing request body",
            status_code=400
        )

Özellikler

C# kitaplığı, aşağıdaki özelliklere sahip olan işlevdeki SQL bağlamalarını bildirmek için SqlAttribute özniteliğini kullanır:

Öznitelik özelliği Açıklama
Commandtext Gerekli. Bağlama tarafından yazılmakta olan tablonun adı.
Bağlan ionStringSetting Gerekli. Verilerin yazıldığı veritabanının bağlantı dizesi içeren bir uygulama ayarının adı. Bu gerçek bağlantı dizesi değildir ve bunun yerine bir ortam değişkenine çözümlenmesi gerekir.

Ek Açıklamalar

Java işlevleri çalışma zamanı kitaplığında, değeri Azure SQL'den gelen parametrelerde ek açıklamayı (com.microsoft.azure.functions.sql.annotation.SQLOutput) kullanın@SQLOutput. Bu ek açıklama aşağıdaki öğeleri destekler:

Öğe Açıklama
Commandtext Gerekli. Bağlama tarafından yazılmakta olan tablonun adı.
connectionStringSetting Gerekli. Verilerin yazıldığı veritabanının bağlantı dizesi içeren bir uygulama ayarının adı. Bu gerçek bağlantı dizesi değildir ve bunun yerine bir ortam değişkenine çözümlenmesi gerekir.
Adı Gerekli. İşlev bağlamasının benzersiz adı.

Yapılandırma

Aşağıdaki tabloda, yöntemine geçirilen output.sql() nesnede options ayarlayabileceğiniz özellikler açıklanmaktadır.

Özellik Açıklama
Commandtext Gerekli. Bağlama tarafından yazılmakta olan tablonun adı.
connectionStringSetting Gerekli. Verilerin yazıldığı veritabanının bağlantı dizesi içeren bir uygulama ayarının adı. Bu gerçek bağlantı dizesi değildir ve bunun yerine bir ortam değişkenine çözümlenmesi gerekir. sql bağlamaları bağlantısını daraltmak için bağlantı dizesi değerindeki isteğe bağlı anahtar sözcükler kullanılabilir.

Yapılandırma

Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.

function.json özelliği Açıklama
type Gerekli. olarak ayarlanmalıdır sql.
direction Gerekli. olarak ayarlanmalıdır out.
Adı Gerekli. İşlev kodundaki varlığı temsil eden değişkenin adı.
Commandtext Gerekli. Bağlama tarafından yazılmakta olan tablonun adı.
connectionStringSetting Gerekli. Verilerin yazıldığı veritabanının bağlantı dizesi içeren bir uygulama ayarının adı. Bu gerçek bağlantı dizesi değildir ve bunun yerine bir ortam değişkenine çözümlenmesi gerekir. sql bağlamaları bağlantısını daraltmak için bağlantı dizesi değerindeki isteğe bağlı anahtar sözcükler kullanılabilir.

Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasınaValues ekleyin.

Kullanım

CommandText özelliği, verilerin depolandığı tablonun adıdır. bağlantı dizesi ayarı adı, Azure SQL veya SQL Server örneğinin bağlantı dizesi içeren uygulama ayarına karşılık gelir.

Çıkış bağlamaları, hedef veritabanında SELECT izinleri gerektiren T-SQL MERGE deyimini kullanır.

SQL çıkış bağlaması yürütürken bir özel durum oluşursa işlev kodu yürütülmeyi durdurur. Bu, 500 hata kodu döndüren HTTP tetikleyicisi gibi bir hata kodunun döndürülmesiyle sonuçlanabilir. IAsyncCollector bir .NET işlevinde kullanılıyorsa işlev kodu çağrısı FlushAsync()tarafından atılan özel durumları işleyebilir.

Sonraki adımlar