当前位置: 首页 > 知识库问答 >
问题:

如何在Azure Cosmos DBSQLAPI中使用SQL参数进行CONTAINS查询?

鲁辉
2023-03-14

我有以下 sql 变量:

SELECT * FROM x WHERE  x.Description CONTAINS(@p1)

我配置了一个名为@p1的SQL参数和一个有效的字符串,即“foo”,并使用以下内容将其添加到SqlParameterCollection集合变量中:

var sqlQuery = new SqlQuerySpec(sql, collection);

然后调用以下查询。

var query = _documentClient.CreateDocumentQuery<T>(GetDocumentCollectionUri<T>(graphRequestContext), sqlQuery, options).AsDocumentQuery();

我得到以下错误:

留言:微软。azure . documents . documents client exception:Message:{ " errors ":[{ " severity ":" Error "," location":{"start":37," end":45}," code":"SC1001 "," Message ":"语法错误,在' CONTAINS '附近的语法不正确。"}]} ActivityId:

根据文件(https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-query-reference),它似乎在寻找字符串表达式。因此,如果事实上是这样的话,我希望得到证实。

共有1个答案

姜凯风
2023-03-14

似乎您以错误的语法使用了包含。请了解正确的语法。

请参考下面的代码,它适用于我。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using System;

namespace DocumentDB.TestClass
{
    class CreateBySqlParam
    {
        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 = "***";

        private static DocumentClient client;

        public static async void QueryTest()

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

            IQueryable<Pojo> queryable = client.CreateDocumentQuery<Pojo>(
                                                uri,
                                                new SqlQuerySpec
                                                {
                                                    QueryText = "SELECT c.id,c.name FROM c WHERE contains(c.name,@param)",
                                                    Parameters = new SqlParameterCollection()
                                                    {
                                                        new SqlParameter("@param", "n")
                                                    }

                                                }
            );

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

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

}

输出:

 类似资料:
  • 我是新来的Node.js,并试图检查如果电子邮件已经通过发送电子邮件作为一个url参数从iOS应用程序。它不起作用,不确定我做错了什么。 我无法console.log前端发送的VSCode中的电子邮件参数,它在XCODE(http://localhost:3000/api/user/email/test@gmail.com)中打印,我知道后端正在获取GET请求。 我的路由器代码是: 非常感谢。

  • 问题内容: 我正在使用Eclipse Java EE进行Web应用程序项目。当前,我的应用程序返回数据库中存储员工个人信息的所有值。但是,我设置了默认的准备语句以搜索表employee_id = 1234,而不是登录员工的employee_id。这意味着无论哪个员工登录到我的系统,它都只会显示该员工的个人信息。 ID为1234,如下面的准备语句所示: 请注意上面的employeeID如何设置为12

  • 为了给出backfround,我使用

  • 问题内容: 例如,我有4000行,并且定义了X限制。 找到X行后查询停止?还是查询找到所有行,然后从找到的行中获取X行? 谢谢你。 问题答案: 从MySQL参考手册: 如果您将LIMIT row_count与ORDER BY一起使用,MySQL会在找到排序结果的前row_count行后立即结束排序,而不是对整个结果进行排序。如果通过使用索引进行排序,这将非常快。如果必须完成文件排序,则必须先选择所

  • 我在ZUUL应用程序中使用spring security,我的API控制对我的微服务的所有访问。使用过滤器可以允许每个登录名指定路由,在过滤器中,我有一个通过“.antMatchers”方法进行控制的对象HttpSecurity。 例如: 我想允许所有在任何语言环境、乞讨、中间或末端具有“昂首阔步”的路线。我在想String类的方法包含,如果包含“昂首阔步”,则允许全部。

  • 问题内容: 我正在尝试为我的应用程序编写查询,但是遇到了一些麻烦。我需要将数据库的一个字段作为参数传递,例如: 因为WHERE子句和ORDER BY子句是动态的,所以用户可以选择。 使用它没有用。 问题答案: JasperReports中 有两个用于参数引用的语法表达式: 和和 。 $ P {paramName}语法 主要用于设置 WHERE 输入参数值。替换算法是“智能”的,其实现使用java.