问题描述
我将此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