创建SQL Server JSON解析/查询UDF

问题描述 投票:2回答:3

首先,在我提出这个问题之前,我先以这是一个“坏”主意的事实为开头。但是出于商业原因,我必须提出解决方案,我希望某个地方的某人可能对此有一些想法。

我有一个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”并在比较中使用它的值。

有人看过这个的实现吗?我已经看过函数的实现。像JSONParser这样将值放入表中,这将无法为我们提供我们需要的明智查询。在复杂性方面,我不想编写一个完整的JSON解析器,但是如果需要的话,我可以。

sql-server json string-parsing
3个回答
2
投票

距您提出问题已有很长时间了,但是现在可以使用一种解决方案-JSON Select,它为不同的数据类型提供各种功能,例如JsonInt()功能。从您的一个示例(假设OrderId是一个int,如果没有,则可以使用其他函数):

SELECT *
FROM MyTable
WHERE dbo.JsonInt(myTable.OtherProperties, 'SubOrder.OrderId') = 25

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


1
投票

[不确定这是否适合您的需求,但我了解了CLR JSON序列化器/反序列化器。您可以在这里找到它,http://www.sqlservercentral.com/articles/CLR/74160/


0
投票

如果无法将SQL Server 2016与内置JSON支持一起使用,则需要使用CLR,例如JSONselect,json4sql或自定义代码,例如http://www.codeproject.com/Articles/1000953/JSON-for-SQL-Server-Part等。>

© www.soinside.com 2019 - 2024. All rights reserved.