如何将 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%'
在实际查询字符串中不包含任何文字 %
。
使用 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%'
在实际查询字符串中不包含任何文字 %
。