首页 > 解决方案 > 使用 json 值查询 SQL 列

问题描述

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

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

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

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

我第一次查询 JSON 值,我想我做的不对,我得到的输出是空的。

任何评论都非常感谢!

标签: sqlsql-servertsqljson-query

解决方案


您需要使用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,
        "InvoiceId": 1605555,
        "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     

推荐阅读