【问题标题】:Cosmos DB parameterised SQL query not working with double quoted parameterCosmos DB 参数化 SQL 查询不适用于双引号参数
【发布时间】:2021-03-10 08:21:46
【问题描述】:

我让这个查询在数据资源管理器中运行良好 - 查询字典项的存在:

SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers["2"])

给定一个带有数据集的容器,例如(简化):

[
   {
       "Name": "Donald",
       "Answers": {
           "1": {
               "a": 3,
               "isCorrect": false
           },
           "2": {
               "a": 7,
               "isCorrect": false
           }
       },
   },
   {
       "Name": "Boris",
       "Answers": {
           "1": {
               "a": 2,
               "isCorrect": false
           }
       },
   },
]

但我现在正试图在代码中对其进行参数化,除非我对参数进行硬编码(即不要参数化),否则它似乎不起作用。

这不起作用

var query = new QueryDefinition("SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers[\"@quNo\"])")
    .WithParameter("@quNo", 2);

但这确实有效

var query = new QueryDefinition("SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers[\"2\"])");

任何想法为什么参数化不起作用?我想这是因为双引号,但不知道如何解决它。

我也尝试过更改为字符串文字,例如

@"SELECT ... <snip> not IS_DEFINED(c.Answers[""@quNo""])";

但这也行不通。

更新:

我添加了一个RequestHandler 来准确跟踪发送到 Cosmos 的内容。发送参数化时,格式为:

{
    "query": "SELECT VALUE [{\"item\": COUNT(c)}]\nFROM c\nWHERE not IS_DEFINED(c.Answers[\"@quNo\"])",
    "parameters": [
        {
            "name": "@quNo",
            "value": 2
        }
    ]
}

根据建议,我尝试将参数值设置为整数或字符串,但都不起作用。

直接在查询中设置值是唯一可行的方法:

{
    "query": "SELECT VALUE [{\"item\": COUNT(c)}]\nFROM c\nWHERE not IS_DEFINED(c.Answers[\"2\"])",
    "parameters": [
    ]
}

我认为这一定与转义字符有关...

【问题讨论】:

    标签: c# azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    我还没有尝试过,但我相信这应该可行:

    var query = new QueryDefinition("SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers[@quNo])")
        .WithParameter("@quNo", "2");
    

    【讨论】:

    • 有趣。那么在这种情况下,请求处理程序会发送什么? (确保您在查询中使用了不带引号的 @quNo。)
    • 啊,对不起,你是对的 - 我错过了你将参数设置为"2"(字符串值不是整数)。我已将 .ToString() 添加到我的整数值中,现在它可以工作了!
    猜你喜欢
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多