Cosmos DB 参数化 SQL 查询不适用于双引号参数
Cosmos DB parameterised SQL query not working with double quoted parameter
我的这个查询在数据资源管理器中运行良好 - 查询是否存在字典项:
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": [
]
}
我想这一定与转义字符有关...
我还没有尝试过,但我相信这应该有效:
var query = new QueryDefinition("SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers[@quNo])")
.WithParameter("@quNo", "2");
我的这个查询在数据资源管理器中运行良好 - 查询是否存在字典项:
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": [
]
}
我想这一定与转义字符有关...
我还没有尝试过,但我相信这应该有效:
var query = new QueryDefinition("SELECT VALUE COUNT(c) FROM c WHERE not IS_DEFINED(c.Answers[@quNo])")
.WithParameter("@quNo", "2");