C#Dapper使用JSON_VALUE进行SQL Server 2016
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#Dapper使用JSON_VALUE进行SQL Server 2016相关的知识,希望对你有一定的参考价值。
我想使用JSON_VALUE
从我的表中查询数据:
var str = "123";
var value = "Name"
using(var conn = GetMyConnection())
{
var result = conn.QueryFirstOrDefault<string>(
@"SELECT [Id] FROM [dbo].[MyTable]
WHERE JSON_VALUE([JsonColumn], @MyQuery) = @Str",
new
{
MyQuery = $"$.{value}",
Str = str
}
);
}
我在SQL Server中尝试这个,它正在工作:
SELECT [Id] FROM [dbo].[MyTable]
WHERE JSON_VALUE([JsonColumn], '$.Name') = '123'
我应该如何调整我的代码?
答案
我在SQL Server中尝试这个,它工作
首先,你错过了一个重要的事情variable
vs literal
。
在SSMS中使用时,它不适用于SQL Server 2016
:
CREATE TABLE MyTAble(ID INT IDENTITY(1,1), JsonColumn NVARCHAR(MAX));
INSERT INTO MyTable( JsonColumn)
VALUES('{"Name":123}');
-- it will work
SELECT [Id] FROM [dbo].[MyTable]
WHERE JSON_VALUE([JsonColumn], '$.Name') = '123';
-- let''s try your example
DECLARE @Path NVARCHAR(MAX) = '$.Name';
SELECT [Id] FROM [dbo].[MyTable]
WHERE JSON_VALUE([JsonColumn], @Path) = '123';
你会得到:
“JSON_VALUE或JSON_QUERY”的参数2必须是字符串文字。
来自SQL Server 2017+
的第二个你可以传递路径作为变量。来自JSON_VALUE:
路径
一个JSON路径,指定要提取的属性。有关详细信息,请参阅JSON路径表达式(SQL Server)。
在SQL Server 2017和Azure SQL数据库中,您可以提供变量作为路径的值。
最后,为了让它在SQL Server 2016
上运行,您可以使用串联(而不是参数绑定)构建查询字符串。
警告!这可能会导致严重的安全问题和SQL注入攻击。
以上是关于C#Dapper使用JSON_VALUE进行SQL Server 2016的主要内容,如果未能解决你的问题,请参考以下文章
多个节点同名时使用 Oracle SQL 获取 JSON_VALUE