You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Cosmos DB输入绑定的SqlQuery中使用动态参数?如何实现?

在Azure Cosmos DB的CosmosDBInput绑定中使用动态参数

可以在CosmosDBInput绑定的SqlQuery中使用动态参数,主要有两种常用实现方式,以下是具体说明和示例:

方式1:直接通过绑定表达式引用参数

通过{参数名}的绑定表达式语法,直接引用函数的输入参数、触发器数据等。注意SqlQuery的字符串语法要避免引号冲突。

修正后的示例代码:

public async Task<string> SomeFunction(
    [ActivityTrigger] string input,
    [CosmosDBInput(
        databaseName: "dbname",
        containerName: "containername",
        SqlQuery = "SELECT * FROM c WHERE c.prop = {input}", // 直接引用ActivityTrigger传入的input参数
        Connection = "DBConnection"
    )] List<someobject> pages,
    FunctionContext executionContext)
{
    // 函数业务逻辑
    return "处理完成";
}

方式2:使用参数化查询(更安全,防SQL注入)

如果需要传递多个参数,或者想规避SQL注入风险,推荐用SqlQueryParameters属性传递参数集合,这种方式会自动处理参数转义。

示例代码:

public async Task<string> SomeFunction(
    [ActivityTrigger] QueryParams input,
    [CosmosDBInput(
        databaseName: "dbname",
        containerName: "containername",
        SqlQuery = "SELECT * FROM c WHERE c.prop = @targetProp AND c.status = @targetStatus",
        SqlQueryParameters = new { targetProp = "{input.TargetProperty}", targetStatus = "{input.TargetStatus}" },
        Connection = "DBConnection"
    )] List<someobject> pages,
    FunctionContext executionContext)
{
    // 函数业务逻辑
    return "处理完成";
}

// 定义参数模型
public class QueryParams
{
    public string TargetProperty { get; set; }
    public string TargetStatus { get; set; }
}

注意事项

  • 绑定表达式中的{参数名}必须对应函数中存在的输入参数,或BindingData中的键
  • 禁止直接拼接字符串到SqlQuery中,优先使用上述两种方式避免SQL注入风险
  • 参数化查询中,SqlQuery用@参数名占位,再通过SqlQueryParameters映射到实际参数

内容的提问来源于stack exchange,提问作者redar ismail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:21:05