Ошибка запроса БД Cosmos с кодом: SC1001 при использовании Distinct - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь запросить космос через documentClientHelper.У меня есть запрос, который хорошо работает в обозревателе запросов, но использует тот же запрос с параметрами, выдавая ошибку при объединении.

Ошибка, возникающая как -

Ошибка :

Microsoft.Azure.DocumentDB.Core: Сообщение: {"errors": [{"severity": "Error", "location": {"start": 428, "end":432}, "code": "SC1001", "message": "Синтаксическая ошибка, неправильный синтаксис рядом с 'join'."}]}

Мой запрос выглядит следующим образом:

    SELECT 
    c.itemCode,c.itemType,c.name,r    
    FROM Products c join r in c.rates     
    WHERE (ARRAY_CONTAINS(r.branchCodes, 80171, true)) AND (c.itemCode = "0600160")     
    ORDER BY c.name

Следующий запрос не выполняется в следующем разделе:

var queryText = "SELECT 
        c.itemCode,c.itemType,c.name,r    
        FROM Products c join r in c.rates     
        WHERE (ARRAY_CONTAINS(r.branchCodes, 80171, true)) AND (c.itemCode = "0600160")     
        ORDER BY c.name";
var querySpec = new SqlQuerySpec(queryText);

 var query = documentClient.CreateDocumentQuery<Product>(collectionUri, querySpec, feedOptions).AsDocumentQuery();
   var response = await DocumentClientHelper.ExecuteWithRetries(async () => await query.ExecuteNextAsync<Product>());

1 Ответ

0 голосов
/ 06 февраля 2019

На основании моего теста оба эти способа работают нормально.

Пример данных:

[
    {
        "name": "aa",
        "rates": [
            {
                "branchCodes": [
                    80171,
                    80172,
                    80170
                ]
            }
        ]
    },
    {
        "name": "aa",
        "rates": [
            {
                "branchCodes": [
                    80170
                ]
            }
        ]
    },
    {
        "name": "aa",
        "rates": [
            {
                "branchCodes": [
                    80172
                ]
            }
        ]
    }
]

запрос sql на портале:

SELECT 
    c.itemCode,c.itemType,c.name,r    
    FROM Products c join r in c.rates     
    WHERE (ARRAY_CONTAINS(r.branchCodes, 80171, true)) AND (c.name = "aa")     
    ORDER BY c.name

enter image description here

код SDK с SqlQuerySpec

using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using System;
using System.Linq;


namespace JayGongDocumentDB.module
{
    class QueryWithSqlParam
    {
        private static readonly string endpointUrl = "https://***.documents.azure.com:443/";
        private static readonly string authorizationKey = "***";
        private static readonly string databaseId = "db";
        private static readonly string collectionId = "coll";

        private static DocumentClient client;

        public static async void QueryTest()

        {
            client = new DocumentClient(new Uri(endpointUrl), authorizationKey);
            var uri = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);

            String sql = "SELECT c.name,r " +
                            "FROM Products c join r in c.rates "+
            " WHERE(ARRAY_CONTAINS(r.branchCodes, 80171, true)) AND(c.name = \"aa\") " +
            " ORDER BY c.name ";

            IQueryable<Pojo> queryable = client.CreateDocumentQuery<Pojo>(
                                                uri,
                                                new SqlQuerySpec
                                                {
                                                    QueryText = sql
                                                });

            foreach (Pojo p in queryable)
            {
                Console.WriteLine("\nRead {0}", p);
            }
        }
    }

    class Pojo : Document
    {
        public string id { get; set; }
        public string name { get; set; }
    }

}

enter image description here

...