使用参数化 SQL 查询将参数从逻辑应用传递到 CosmosDB 存储过程

问题描述 投票:0回答:1

我尝试从逻辑应用程序调用 CosmosDB 中的存储过程并使用一些参数,以便能够检索满足查询要求的文档数量。

我想做的查询示例:

SELECT * FROM c where c.Time_Stamp BETWEEN time1 AND time2

我尝试在数据资源管理器中测试我的存储过程。这就是我正在做的事情。

// SAMPLE STORED PROCEDURE
function sample(input) {
var context = getContext();
var collection = getContext().getCollection();
var response = context.getResponse();
//var inputtf = JSON.parse(input).id;
var filterQuery = "SELECT * FROM c where c.id = "+ input ;
console.log(filterQuery);
// Query documents and take 1st item.
var isAccepted = collection.queryDocuments(
    collection.getSelfLink(),
    filterQuery,
function (err, feed, options) {
    if (err) throw err;
response.setBody(JSON.stringify(feed));
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

作为我给出的输入:

enter image description here

我得到了这个结果:

SELECT * FROM c where c.id = 220

所以我可以看到我的查询能够获取其中的参数。

问题是我没有得到该查询的结果(结果是“[]”)

这是我要查询的文档:

enter image description here

这将是我首先发送到存储过程的有效负载类型。下一步是添加 UTC 格式的开始时间和结束时间参数。

enter image description here

作为最终目标,我想在逻辑应用程序的输出中获得满足查询要求的文档数量。

stored-procedures azure-cosmosdb azure-logic-apps prepared-statement
1个回答
0
投票

如果我没记错的话,执行存储过程活动的分区键参数应该作为字符串发送。因此,您需要在分区键值之间添加引号。

在您的情况下:“42976”而不是 42976

存储过程需要有效的分区键值才能执行并响应查询。您可以在 Microsoft 文档的本页顶部看到一条注释:https://learn.microsoft.com/en-us/azure/cosmos-db/sql/how-to-write-stored-procedures-triggers- udfs?tabs=javascript

© www.soinside.com 2019 - 2024. All rights reserved.