使用json值查询SQL列

问题描述

我将此JSON值存储在sql文本列中:

[
  {
    "Id": 1807080,"InvoiceId": 1605555,"UnitRate": 6924.00,"Total": 6924.00
  },{
    "Id": 1807081,"UnitRate": 16924.00,"Total": 16924.00
  },{
    "Id": 1807082,"InvoiceId": 1605555
  }
]

我正在尝试选择所有id值,尝试这样的事情:

select JSON_VALUE(Items,'$.Id') as IdValue 
from InvoiceTable 

我是第一次查询JSON值,我想我做得不好,我得到的输出为null。

任何评论都非常感谢!

解决方法

您需要使用OPENJSON()和显式架构(列定义)以及APPLY运算符来解析JSON内容。

表格:

CREATE TABLE InvoiceTable (Items varchar(1000))
INSERT INTO InvoiceTable (Items) 
VALUES ('
    [
      {
        "Id": 1807080,"InvoiceId": 1605555,"UnitRate": 6924.00,"Total": 6924.00
      },{
        "Id": 1807081,"UnitRate": 16924.00,"Total": 16924.00
      },{
        "Id": 1807082,"InvoiceId": 1605555
      }
    ]
')

声明:

SELECT j.*
FROM InvoiceTable i
CROSS APPLY OPENJSON(i.Items) WITH (
   Id int '$.Id',InvoiceId int '$.InvoiceId',UnitRate numeric(10,2) '$.UnitRate',Total numeric(10,2) '$.Total'
) j

结果:

Id      InvoiceId   UnitRate      Total
1807080 1605555      6924.00    6924.00
1807081 1605555     16924.00   16924.00
1807082 1605555