【问题标题】:Creating SQL Server JSON Parsing/Query UDF创建 SQL Server JSON 解析/查询 UDF
【发布时间】:2011-10-26 21:44:14
【问题描述】:

首先,在我进入这个问题之前,我会以我知道这是一个“坏”的想法作为开头。但出于商业原因,我必须想出一个解决方案,我希望某个地方的某个人可能对如何解决这个问题有一些想法。

我有一个包含“OtherProperties”列的 SQL Server 2008 R2 表。此列包含与记录相关的各种其他、有些随意的附加信息。例如,有一个业务需要创建一个我们可以用来查询结果的 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


【解决方案1】:

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

【讨论】:

  • 这有点帮助,但我确实需要对 JSON 列进行本机解析/查询……但这是一个很好的发现!
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    如果您无法使用具有内置 JSON 支持的 SQL Server 2016,则需要使用 CLR,例如JSONselect、json4sql,或者自定义代码如http://www.codeproject.com/Articles/1000953/JSON-for-SQL-Server-Part

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 2015-02-15
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2018-09-30
      • 2017-11-06
      • 1970-01-01
      相关资源
      最近更新 更多