Sql server 创建SQL Server JSON解析/查询UDF

Sql server 创建SQL Server JSON解析/查询UDF,sql-server,json,string-parsing,Sql Server,Json,String Parsing,首先,在我开始讨论这个问题之前,我会先说一个事实,我知道这是一个“坏”主意。但出于商业原因,我必须想出一个解决方案,我希望某个人,某个地方,可能会对如何解决这个问题有一些想法 我有一个SQL Server 2008 R2表,它有一个“OtherProperties”列。此列包含与记录相关的各种其他任意附加信息。例如,业务需要创建一个我们可以用来查询结果的UDF SELECT * FROM MyTable WHERE MyUDFGetValue(myTable.OtherProperties, "

首先,在我开始讨论这个问题之前,我会先说一个事实,我知道这是一个“坏”主意。但出于商业原因,我必须想出一个解决方案,我希望某个人,某个地方,可能会对如何解决这个问题有一些想法

我有一个SQL Server 2008 R2表,它有一个“OtherProperties”列。此列包含与记录相关的各种其他任意附加信息。例如,业务需要创建一个我们可以用来查询结果的UDF

SELECT *
FROM MyTable
WHERE MyUDFGetValue(myTable.OtherProperties, "LinkedOrder[0]") IS NOT NULL
这将找到一个记录,其中有一个LinkedOrder条目数组,该数组在索引0处包含一个值

SELECT *
FROM MyTable
WHERE MyUDFGetValue(myTable.OtherProperties, "SubOrder.OrderId") = 25
这将查找属性“orderId”,并在比较中使用其值


有人看到这一方案的实施吗?我见过函数的实现。像这样,将值放入一个表中,这将无法从查询中得到我们需要的内容。就复杂性而言,我不想编写一个完整的JSON解析器,但如果需要,我可以这样做。

不确定这是否适合您的需要,但我读过关于CLR JSON序列化器/反序列化器的文章。您可以在这里找到它,

很久没有问过您的问题了,但是现在有一个解决方案可以使用-它为不同的数据类型提供各种函数,例如
JsonInt()
函数。根据您的一个示例(假设OrderId是int,如果不是,您可以使用其他函数):

披露:
我是JSON Select的作者,因此我对您使用它感兴趣:)

如果您无法使用内置JSON支持的SQL Server 2016,则需要使用CLR,例如JSONselect、json4sql或自定义代码,如等。

这有些帮助,但我真的需要对JSON列进行本机解析/查询……但这是一个很好的发现!可能重复的
SELECT *
FROM MyTable
WHERE dbo.JsonInt(myTable.OtherProperties, 'SubOrder.OrderId') = 25