如何将 SQL LIKE '%value%' 运算符与 Azure Functions SQL 绑定一起使用?

How do I use SQL LIKE '%value%' operator with Azure Functions SQL Binding?

使用 Azure 函数的预览版 SQL Input Binding,您可以通过在绑定中指定它来轻松执行 SQL 查询,例如:

 [FunctionName("GetToDoItem")]
 public static IActionResult Run(
   [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitem")]
   HttpRequest req,
   [Sql("select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
     CommandType = System.Data.CommandType.Text,
     Parameters = "@Id={Query.id}",
     ConnectionStringSetting = "SqlConnectionString")]
     IEnumerable<ToDoItem> toDoItem)
        {
            return new OkObjectResult(toDoItem.FirstOrDefault());
        }
    ...

一旦我尝试使用 LIKE 运算符,例如:

 [FunctionName("GetToDoItem")]
 public static IActionResult Run(
   [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitem")]
   HttpRequest req,
   [Sql("select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id and title like '%Whosebug%'",
     CommandType = System.Data.CommandType.Text,
     Parameters = "@Id={Query.id}",
     ConnectionStringSetting = "SqlConnectionString")]
     IEnumerable<ToDoItem> toDoItem)
        {
            return new OkObjectResult(toDoItem.FirstOrDefault());
        }
    ...

我收到如下异常:

Error indexing method 'GetToDoItem' '%Whosebug%' does not resolve to a value.

我明白,这是由于 app setting lookup of the binding expressions,但我想不出一种“转义”这些百分号的方法。目前,我唯一的解决方法是手动执行查询。

是否有任何其他选项可以使用百分号进行 SQL 之类的比较? 我尝试了双 %% 符号以及使用反斜杠转义 %。

这是一个变通解决方案。

如果事实证明存在转义百分号字符的语法,那么这将立即过时。

但是避免该问题的一种方法是如下更改查询

SELECT [Id],
       [order],
       [title],
       [url],
       [completed]
FROM   dbo.ToDo
WHERE  Id = @Id
       AND title LIKE Concat(Char(37), 'Whosebug', Char(37)) 

这应该将常量折叠(在 SQL 服务器执行计划中)到

title like '%Whosebug%'

在实际查询字符串中不包含任何文字 %