Azure Functions에 대한 Azure SQL 입력 바인딩
함수가 실행되면 Azure SQL 입력 바인딩은 데이터베이스에서 데이터를 검색하여 함수의 입력 매개 변수에 전달합니다.
설정 및 구성 세부 정보에 대한 자세한 내용은 개요를 참조하세요.
Important
이 문서에서는 탭을 사용하여 여러 버전의 Node.js 프로그래밍 모델을 지원합니다. v4 모델은 일반적으로 사용 가능하며 JavaScript 및 TypeScript 개발자를 위해 보다 유연하고 직관적인 환경을 제공하도록 설계되었습니다. v4 모델의 작동 방식에 대한 자세한 내용은 Azure Functions Node.js 개발자 가이드를 참조하세요. v3과 v4의 차이점에 대해 자세히 알아보려면 마이그레이션 가이드를 참조하세요.
예제
C# 함수는 다음 C# 모드 중 하나를 사용하여 만들 수 있습니다.
- 격리된 작업자 모델: 런타임에서 격리된 작업자 프로세스에서 실행되는 컴파일된 C# 함수입니다. LTS 및 비 LTS 버전 .NET 및 .NET Framework에서 실행되는 C# 함수를 지원하려면 격리된 작업자 프로세스가 필요합니다.
- In Process 모델: Functions 런타임과 동일한 프로세스에서 실행되는 컴파일된 C# 함수입니다.
- C# 스크립트: Azure Portal에서 C# 함수를 만들 때 주로 사용됩니다.
Important
In Process 모델에 대한 지원은 2026년 11월 10일에 종료됩니다. 전체 지원을 위해 앱을 격리된 작업자 모델로 마이그레이션하는 것이 좋습니다.
Azure SQL 입력 바인딩에 대한 더 많은 샘플은 GitHub 리포지토리에서 사용할 수 있습니다.
이 섹션에는 다음 예제가 포함되어 있습니다.
예는 ToDoItem
클래스와 해당 데이터베이스 테이블을 참조하세요.
namespace AzureSQL.ToDo
{
public class ToDoItem
{
public Guid Id { get; set; }
public int? order { get; set; }
public string title { get; set; }
public string url { get; set; }
public bool? completed { get; set; }
}
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
HTTP 트리거, 쿼리 문자열에서 ID별 행 가져오기
다음 예는 단일 레코드를 검색하는 C# 함수를 보여 줍니다. 함수는 쿼리 문자열을 사용하여 ID를 지정하는 HTTP 요청에 의해 트리거됩니다. 해당 ID는 지정된 쿼리로 ToDoItem
레코드를 쿼리하는 데 사용됩니다.
참고 항목
HTTP 쿼리 문자열 매개 변수는 대/소문자를 구분합니다.
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker.Http;
namespace AzureSQLSamples
{
public static class GetToDoItem
{
[FunctionName("GetToDoItem")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitem")]
HttpRequest req,
[SqlInput(commandText: "select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
commandType: System.Data.CommandType.Text,
parameters: "@Id={Query.id}",
connectionStringSetting: "SqlConnectionString")]
IEnumerable<ToDoItem> toDoItem)
{
return new OkObjectResult(toDoItem.FirstOrDefault());
}
}
}
HTTP 트리거, 경로 매개 변수에서 여러 행 가져오기
다음 예는 쿼리에서 반환된 문서를 쿼리하는 C# 함수를 보여 줍니다. 이 함수는 경로 데이터를 사용하여 쿼리 매개 변수의 값을 지정하는 HTTP 요청에 의해 트리거됩니다. 해당 매개 변수는 지정된 쿼리에서 ToDoItem
레코드를 필터링하는 데 사용됩니다.
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker.Http;
namespace AzureSQLSamples
{
public static class GetToDoItems
{
[FunctionName("GetToDoItems")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitems/{priority}")]
HttpRequest req,
[SqlInput(commandText: "select [Id], [order], [title], [url], [completed] from dbo.ToDo where [Priority] > @Priority",
commandType: System.Data.CommandType.Text,
parameters: "@Priority={priority}",
connectionStringSetting: "SqlConnectionString")]
IEnumerable<ToDoItem> toDoItems)
{
return new OkObjectResult(toDoItems);
}
}
}
HTTP 트리거, 행 삭제
다음 예는 HTTP 요청 쿼리 매개 변수의 입력으로 저장 프로시저를 실행하는 C# 함수를 보여 줍니다.
저장 프로시저 dbo.DeleteToDo
는 SQL 데이터베이스에 만들어져야 합니다. 이 예에서 저장 프로시저는 매개 변수 값에 따라 단일 레코드 또는 모든 레코드를 삭제합니다.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
namespace AzureSQL.ToDo
{
public static class DeleteToDo
{
// delete all items or a specific item from querystring
// returns remaining items
// uses input binding with a stored procedure DeleteToDo to delete items and return remaining items
[FunctionName("DeleteToDo")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "DeleteFunction")] HttpRequest req,
ILogger log,
[SqlInput(commandText: "DeleteToDo", commandType: System.Data.CommandType.StoredProcedure,
parameters: "@Id={Query.id}", connectionStringSetting: "SqlConnectionString")]
IEnumerable<ToDoItem> toDoItems)
{
return new OkObjectResult(toDoItems);
}
}
}
Azure SQL 입력 바인딩에 대한 더 많은 샘플은 GitHub 리포지토리에서 사용할 수 있습니다.
이 섹션에는 다음 예제가 포함되어 있습니다.
예는 ToDoItem
클래스(별도 파일 ToDoItem.java
)와 해당 데이터베이스 테이블을 참조하세요.
package com.function;
import java.util.UUID;
public class ToDoItem {
public UUID Id;
public int order;
public String title;
public String url;
public boolean completed;
public ToDoItem() {
}
public ToDoItem(UUID Id, int order, String title, String url, boolean completed) {
this.Id = Id;
this.order = order;
this.title = title;
this.url = url;
this.completed = completed;
}
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
HTTP 트리거, 여러 행 가져오기
다음 예제에서는 HTTP 요청에 의해 트리거되고 쿼리에서 읽고 HTTP 응답에서 결과를 반환하는 Java 함수의 SQL 입력 바인딩을 보여줍니다.
package com.function;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.sql.annotation.SQLInput;
import java.util.Optional;
public class GetToDoItems {
@FunctionName("GetToDoItems")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@SQLInput(
name = "toDoItems",
commandText = "SELECT * FROM dbo.ToDo",
commandType = "Text",
connectionStringSetting = "SqlConnectionString")
ToDoItem[] toDoItems) {
return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItems).build();
}
}
HTTP 트리거, 쿼리 문자열에서 ID별 행 가져오기
다음 예제에서는 HTTP 요청에 의해 트리거되고 쿼리 문자열의 매개 변수로 필터링된 쿼리에서 읽고 HTTP 응답의 행을 반환하는 Java 함수의 SQL 입력 바인딩을 보여줍니다.
public class GetToDoItem {
@FunctionName("GetToDoItem")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@SQLInput(
name = "toDoItems",
commandText = "SELECT * FROM dbo.ToDo",
commandType = "Text",
parameters = "@Id={Query.id}",
connectionStringSetting = "SqlConnectionString")
ToDoItem[] toDoItems) {
ToDoItem toDoItem = toDoItems[0];
return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItem).build();
}
}
HTTP 트리거, 행 삭제
다음 예제에서는 HTTP 요청에 의해 트리거되고 HTTP 요청 쿼리 매개 변수의 입력으로 저장 프로시저를 실행하는 Java 함수의 SQL 입력 바인딩을 보여 줍니다.
저장 프로시저 dbo.DeleteToDo
는 데이터베이스에 생성되어야 합니다. 이 예에서 저장 프로시저는 매개 변수 값에 따라 단일 레코드 또는 모든 레코드를 삭제합니다.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
public class DeleteToDo {
@FunctionName("DeleteToDo")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@SQLInput(
name = "toDoItems",
commandText = "dbo.DeleteToDo",
commandType = "StoredProcedure",
parameters = "@Id={Query.id}",
connectionStringSetting = "SqlConnectionString")
ToDoItem[] toDoItems) {
return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItems).build();
}
}
Azure SQL 입력 바인딩에 대한 더 많은 샘플은 GitHub 리포지토리에서 사용할 수 있습니다.
이 섹션에는 다음 예제가 포함되어 있습니다.
예제는 데이터베이스 테이블을 참조하세요.
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
HTTP 트리거, 여러 행 가져오기
다음 예제에서는 HTTP 요청에 의해 트리거되고 쿼리에서 읽고 HTTP 응답에서 결과를 반환하는 SQL 입력 바인딩을 보여 드립니다.
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const sqlInput = input.sql({
commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo',
commandType: 'Text',
connectionStringSetting: 'SqlConnectionString',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItems = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItems,
};
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');
const sqlInput = input.sql({
commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo',
commandType: 'Text',
connectionStringSetting: 'SqlConnectionString',
});
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: (request, context) => {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItems = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItems,
};
},
});
HTTP 트리거, 쿼리 문자열에서 ID별 행 가져오기
다음 예제에서는 HTTP 요청에 의해 트리거되고 쿼리 문자열의 매개 변수로 필터링된 쿼리에서 읽고 HTTP 응답의 행을 반환하는 SQL 입력 바인딩을 보여 드립니다.
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const sqlInput = input.sql({
commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id',
commandType: 'Text',
parameters: '@Id={Query.id}',
connectionStringSetting: 'SqlConnectionString',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItem = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItem,
};
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');
const sqlInput = input.sql({
commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id',
commandType: 'Text',
parameters: '@Id={Query.id}',
connectionStringSetting: 'SqlConnectionString',
});
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: (request, context) => {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItem = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItem,
};
},
});
HTTP 트리거, 행 삭제
다음 예제에서는 HTTP 요청에 의해 트리거되고 HTTP 요청 쿼리 매개 변수의 입력을 사용하여 저장 프로시저를 실행하는 SQL 입력 바인딩을 보여 줍니다.
저장 프로시저 dbo.DeleteToDo
는 데이터베이스에 생성되어야 합니다. 이 예에서 저장 프로시저는 매개 변수 값에 따라 단일 레코드 또는 모든 레코드를 삭제합니다.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const sqlInput = input.sql({
commandText: 'DeleteToDo',
commandType: 'StoredProcedure',
parameters: '@Id={Query.id}',
connectionStringSetting: 'SqlConnectionString',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItems = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItems,
};
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');
const sqlInput = input.sql({
commandText: 'DeleteToDo',
commandType: 'StoredProcedure',
parameters: '@Id={Query.id}',
connectionStringSetting: 'SqlConnectionString',
});
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: (request, context) => {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItems = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItems,
};
},
});
Azure SQL 입력 바인딩에 대한 더 많은 샘플은 GitHub 리포지토리에서 사용할 수 있습니다.
이 섹션에는 다음 예제가 포함되어 있습니다.
예제는 데이터베이스 테이블을 참조하세요.
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
HTTP 트리거, 여러 행 가져오기
다음 예제에서는 function.json 파일의 SQL 입력 바인딩과 HTTP 요청에 의해 트리거되고 쿼리에서 읽고 HTTP 응답에서 결과를 반환하는 PowerShell 함수를 보여 드립니다.
다음은 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"
}
구성 섹션에서는 이러한 속성을 설명합니다.
다음은 run.ps1
파일의 함수에 대한 샘플 PowerShell 코드입니다.
using namespace System.Net
param($Request, $todoItems)
Write-Host "PowerShell function with SQL Input Binding processed a request."
Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = $todoItems
})
HTTP 트리거, 쿼리 문자열에서 ID별 행 가져오기
다음 예제에서는 HTTP 요청에 의해 트리거되고 쿼리 문자열의 매개 변수로 필터링된 쿼리에서 읽고 HTTP 응답의 행을 반환하는 PowerShell 함수의 SQL 입력 바인딩을 보여줍니다.
다음은 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"
}
구성 섹션에서는 이러한 속성을 설명합니다.
다음은 run.ps1
파일의 함수에 대한 샘플 PowerShell 코드입니다.
using namespace System.Net
param($Request, $todoItem)
Write-Host "PowerShell function with SQL Input Binding processed a request."
Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = $todoItem
})
HTTP 트리거, 행 삭제
다음 예제에서는 function.json 파일의 SQL 입력 바인딩과 HTTP 요청에 의해 트리거되고 HTTP 요청 쿼리 매개 변수의 입력으로 저장 프로시저를 실행하는 PowerShell 함수를 보여 줍니다.
저장 프로시저 dbo.DeleteToDo
는 데이터베이스에 생성되어야 합니다. 이 예에서 저장 프로시저는 매개 변수 값에 따라 단일 레코드 또는 모든 레코드를 삭제합니다.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "todoItems",
"type": "sql",
"direction": "in",
"commandText": "DeleteToDo",
"commandType": "StoredProcedure",
"parameters": "@Id = {Query.id}",
"connectionStringSetting": "SqlConnectionString"
}
구성 섹션에서는 이러한 속성을 설명합니다.
다음은 run.ps1
파일의 함수에 대한 샘플 PowerShell 코드입니다.
using namespace System.Net
param($Request, $todoItems)
Write-Host "PowerShell function with SQL Input Binding processed a request."
Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = $todoItems
})
Azure SQL 입력 바인딩에 대한 더 많은 샘플은 GitHub 리포지토리에서 사용할 수 있습니다.
이 섹션에는 다음 예제가 포함되어 있습니다.
예제는 데이터베이스 테이블을 참조하세요.
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
HTTP 트리거, 여러 행 가져오기
다음 예제에서는 function.json 파일의 SQL 입력 바인딩과 HTTP 요청에 의해 트리거되고 쿼리에서 읽고 HTTP 응답에서 결과를 반환하는 Python 함수를 보여 드립니다.
다음은 function_app.py 파일에 대한 샘플 Python 코드입니다.
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"
)
HTTP 트리거, 쿼리 문자열에서 ID별 행 가져오기
다음 예제에서는 HTTP 요청에 의해 트리거되고 쿼리 문자열의 매개 변수로 필터링된 쿼리에서 읽고 HTTP 응답의 행을 반환하는 Python 함수의 SQL 입력 바인딩을 보여줍니다.
다음은 function_app.py 파일에 대한 샘플 Python 코드입니다.
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"
)
HTTP 트리거, 행 삭제
다음 예제에서는 function.json 파일의 SQL 입력 바인딩과 HTTP 요청에 의해 트리거되고 HTTP 요청 쿼리 매개 변수의 입력으로 저장 프로시저를 실행하는 Python 함수를 보여 줍니다.
저장 프로시저 dbo.DeleteToDo
는 데이터베이스에 생성되어야 합니다. 이 예에서 저장 프로시저는 매개 변수 값에 따라 단일 레코드 또는 모든 레코드를 삭제합니다.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
다음은 function_app.py 파일에 대한 샘플 Python 코드입니다.
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"
)
특성
C# 라이브러리는 SqlAttribute 특성을 사용하여 다음 속성이 있는 함수에서 SQL 바인딩을 선언합니다.
특성 속성 | 설명 |
---|---|
CommandText | 필수입니다. Transact-SQL 쿼리 명령 또는 바인딩에서 실행된 저장 프로시저의 이름입니다. |
ConnectionStringSetting | 필수입니다. 쿼리 또는 저장 프로시저가 실행되는 데이터베이스에 대한 연결 문자열을 포함하는 앱 설정의 이름입니다. 이 값은 실제 연결 문자열이 아니며 대신 환경 변수 이름으로 확인되어야 합니다. |
CommandType | 필수입니다. 쿼리에 대해 텍스트이고 저장 프로시저에 대해 StoredProcedure인 CommandType 값입니다. |
매개 변수 | 선택 사항. 단일 문자열로 실행하는 동안 명령에 전달된 매개 변수 값이 0개 이상입니다. @param1=param1,@param2=param2 형식을 따라야 합니다. 매개 변수 이름이나 매개 변수 값 모두 쉼표(= ) 또는 등호(, )를 포함할 수 없습니다. |
주석
Java 함수 런타임 라이브러리에서 값이 Azure SQL에서 제공되는 매개 변수에 대한 @SQLInput
주석(com.microsoft.azure.functions.sql.annotation.SQLInput
)을 사용합니다. 이 주석은 다음 요소를 지원합니다.
요소 | 설명 |
---|---|
commandText | 필수입니다. Transact-SQL 쿼리 명령 또는 바인딩에서 실행된 저장 프로시저의 이름입니다. |
connectionStringSetting | 필수입니다. 쿼리 또는 저장 프로시저가 실행되는 데이터베이스에 대한 연결 문자열을 포함하는 앱 설정의 이름입니다. 이 값은 실제 연결 문자열이 아니며 대신 환경 변수 이름으로 확인되어야 합니다. |
commandType | 필수입니다. 쿼리에 대해 "Text"이고 저장 프로시저에 대해 "StoredProcedure"인 CommandType 값입니다. |
이름 | 필수입니다. 함수 바인딩의 고유한 이름입니다. |
parameters | 선택 사항. 단일 문자열로 실행하는 동안 명령에 전달된 매개 변수 값이 0개 이상입니다. @param1=param1,@param2=param2 형식을 따라야 합니다. 매개 변수 이름이나 매개 변수 값 모두 쉼표(= ) 또는 등호(, )를 포함할 수 없습니다. |
구성
다음 표에서는 input.sql()
메서드에 전달된 options
개체에 설정할 수 있는 속성에 대해 설명합니다.
속성 | 설명 |
---|---|
commandText | 필수입니다. Transact-SQL 쿼리 명령 또는 바인딩에서 실행된 저장 프로시저의 이름입니다. |
connectionStringSetting | 필수입니다. 쿼리 또는 저장 프로시저가 실행되는 데이터베이스에 대한 연결 문자열을 포함하는 앱 설정의 이름입니다. 이 값은 실제 연결 문자열이 아니며 대신 환경 변수 이름으로 확인되어야 합니다. 연결 문자열 값의 선택적 키워드는 SQL 바인딩 연결을 구체화하는 데 사용할 수 있습니다. |
commandType | 필수입니다. 쿼리에 대해 텍스트이고 저장 프로시저에 대해 StoredProcedure인 CommandType 값입니다. |
parameters | 선택 사항. 단일 문자열로 실행하는 동안 명령에 전달된 매개 변수 값이 0개 이상입니다. @param1=param1,@param2=param2 형식을 따라야 합니다. 매개 변수 이름이나 매개 변수 값 모두 쉼표(= ) 또는 등호(, )를 포함할 수 없습니다. |
구성
다음 표에서는 function.json 파일에 설정된 바인딩 구성 속성을 설명합니다.
function.json 속성 | 설명 |
---|---|
type | 필수입니다. sql 로 설정해야 합니다. |
direction | 필수입니다. in 로 설정해야 합니다. |
이름 | 필수입니다. 함수 코드에서 쿼리 결과를 나타내는 변수의 이름입니다. |
commandText | 필수입니다. Transact-SQL 쿼리 명령 또는 바인딩에서 실행된 저장 프로시저의 이름입니다. |
connectionStringSetting | 필수입니다. 쿼리 또는 저장 프로시저가 실행되는 데이터베이스에 대한 연결 문자열을 포함하는 앱 설정의 이름입니다. 이 값은 실제 연결 문자열이 아니며 대신 환경 변수 이름으로 확인되어야 합니다. 연결 문자열 값의 선택적 키워드는 SQL 바인딩 연결을 구체화하는 데 사용할 수 있습니다. |
commandType | 필수입니다. 쿼리에 대해 텍스트이고 저장 프로시저에 대해 StoredProcedure인 CommandType 값입니다. |
parameters | 선택 사항. 단일 문자열로 실행하는 동안 명령에 전달된 매개 변수 값이 0개 이상입니다. @param1=param1,@param2=param2 형식을 따라야 합니다. 매개 변수 이름이나 매개 변수 값 모두 쉼표(= ) 또는 등호(, )를 포함할 수 없습니다. |
로컬에서 개발하는 경우 Values
컬렉션의 local.settings.json 파일에 애플리케이션 설정을 추가합니다.
사용
특성의 생성자는 SQL 명령 텍스트, 명령 형식, 매개 변수 및 연결 문자열 설정 이름을 사용합니다. 명령은 명령 형식이 System.Data.CommandType.Text
인 T-SQL(Transact-SQL) 쿼리이거나 명령 형식이 System.Data.CommandType.StoredProcedure
인 저장 프로시저 이름일 수 있습니다. 연결 문자열 설정 이름은 Azure SQL 또는 SQL Server 인스턴스에 대한 연결 문자열이 포함된 애플리케이션 설정(로컬 개발의 경우 local.settings.json
)에 해당합니다.
입력 바인딩에 의해 실행되는 쿼리는 바인딩에 전달된 매개 변수 값에서 SQL 삽입 의 위험을 줄이기 위해 Microsoft.Data.SqlClient에서 매개 변수화됩니다.
SQL 입력 바인딩이 실행될 때 예외가 발생하면 함수 코드가 실행되지 않습니다. 이로 인해 500 오류 코드를 반환하는 HTTP 트리거와 같은 오류 코드가 반환될 수 있습니다.