尽管SQL查询有效,但Azure门户中的Azure存储过程不起作用

时间:2019-08-05 06:43:53

标签: azure stored-procedures azure-cosmosdb

即使在Azure门户上进行测试时,以下存储过程中使用的SQL查询也会产生结果,但以下存储过程无法产生任何结果。

function checktemp() {
    var context = getContext();
    var container = context.getCollection();
    var response = context.getResponse();

    let query = `SELECT DISTINCT {"Elevator": t.connectiondeviceid,
        "Vibration": t["vibration"],
        "Temperature": t["temperature"]} 

    FROM t 
    WHERE t["temperature"] > 75
    AND t.EventEnqueuedUtcTime > "2019-08-03T20:30:51.905Z"
    ORDER BY t["temperature"] DESC`

    // Query documents and take 1st item.
    var isAccepted = container.queryDocuments(
        container.getSelfLink(), query,
    function (err, feed, options) {
        if (err) throw err;

        // Check the feed and if empty, set the body to 'no docs found', 
        // else take 1st element from feed
        if (!feed || !feed.length) {
            response.setBody('no docs found');
        }
        else {
            var body = { moststrain: feed[0] };
            response.setBody(JSON.stringify(body));
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

我希望有物品退回,但是我总是得到“找不到文档”。我的分区键是/ ConnectionDeviceId。

1 个答案:

答案 0 :(得分:1)

使用存储过程代码测试了示例文档,它对我有用。您的SP结构应该很好。

enter image description here

您提供的属性(ConnectionDeviceId)的拼写错误,在sql:ConnectionDeviceId中应为t.ConnectionDeviceId

enter image description here

要解决此类问题,例如门户网站中的某些问题,而SP中没有任何结果,我建议您逐步删除查询语句,以查找SQL的哪一部分没有结果。


无论如何,该问题与分区键有关。当您在门户网站中查询数据时,它将扫描所有分区。但是,如果执行SP,则仅扫描特定分区。

由于数据是在“ connectiondeviceid”上分区的,因此我应该在执行存储过程时为其提供一个值。