• SQL Server 操作JSON数据库列


    Sql Server 从 2016 开始支持了一些 json 操作,但在SqlServer中Json还是被存储为字符串,如下:

    1. use [tempdb]
    2. declare @JSON nvarchar(max)
    3. set @JSON=N'{
    4. "id": "WakefieldFamily",
    5. "parents": [
    6. { "familyName": "Wakefield", "givenName": "Robin" },
    7. { "familyName": "Miller", "givenName": "Ben" }
    8. ],
    9. "children": [
    10. {
    11. "familyName": "Merriam",
    12. "givenName": "Jesse",
    13. "gender": "female",
    14. "grade": 1,
    15. "pets": [
    16. { "givenName": "Goofy" },
    17. { "givenName": "Shadow" }
    18. ]
    19. },
    20. {
    21. "familyName": "Miller",
    22. "givenName": "Lisa",
    23. "gender": "female",
    24. "grade": 8
    25. }
    26. ],
    27. "address": { "state": "NY", "county": "Manhattan", "city": "NY" },
    28. "creationDate": 1431620462,
    29. "isRegistered": false
    30. }'
    31. --此 JSON 文档包含嵌套的复杂元素,存储在下面的示例表中:
    32. --CREATE TABLE Families (
    33. -- id int identity constraint PK_JSON_ID primary key,
    34. -- doc nvarchar(max)
    35. --)
    36. --insert into Families(doc) select @JSON
    37. SELECT * FROM Families WHERE ISJSON(doc) > 0
    38. --使用 JSON_VALUE 函数从 JSON 文本中提取值
    39. SELECT JSON_VALUE(f.doc, '$.id') AS Name,
    40. JSON_VALUE(f.doc, '$.address.city') AS City,
    41. JSON_VALUE(f.doc, '$.address.county') AS County
    42. FROM Families f
    43. WHERE JSON_VALUE(f.doc, '$.id') = N'WakefieldFamily'
    44. ORDER BY JSON_VALUE(f.doc, '$.address.city') DESC, JSON_VALUE(f.doc, '$.address.state') ASC
    45. --WakefieldFamily NY Manhattan
    46. --使用 JSON_QUERY 函数从 JSON 文本中提取对象或数组
    47. SELECT JSON_QUERY(f.doc, '$.address') AS Address,
    48. JSON_QUERY(f.doc, '$.parents') AS Parents,
    49. JSON_QUERY(f.doc, '$.parents[0]') AS Parent0
    50. FROM Families f
    51. WHERE JSON_VALUE(f.doc, '$.id') = N'WakefieldFamily'
    52. --分析嵌套式 JSON 集合
    53. SELECT JSON_VALUE(f.doc, '$.id') AS Name,
    54. JSON_VALUE(f.doc, '$.address.city') AS City,
    55. c.givenName, c.grade
    56. FROM Families f
    57. CROSS APPLY OPENJSON(f.doc, '$.children') WITH(grade int, givenName nvarchar(100)) c
    58. --查询嵌套式分层 JSON 子数组
    59. SELECT familyName,
    60. c.givenName AS childGivenName,
    61. c.firstName AS childFirstName,
    62. p.givenName AS petName
    63. FROM Families f
    64. CROSS APPLY OPENJSON(f.doc) WITH (familyName nvarchar(100), children nvarchar(max) AS JSON)
    65. CROSS APPLY OPENJSON(children) WITH (givenName nvarchar(100), firstName nvarchar(100), pets nvarchar(max) AS JSON) as c
    66. OUTER APPLY OPENJSON (pets) WITH (givenName nvarchar(100)) as p
    67. --JSON_VALUE 和 JSON_QUERY 之间的主要区别在于 JSON_VALUE 返回标量值,而 JSON_QUERY 返回数组或对象。
    68. --use [AdventureWorks]
    69. --修改 JSON 对象
    70. DECLARE @info NVARCHAR(100)='{"name":"John","skills":["C#","SQL"]}'
    71. PRINT @info
    72. -- Update skills array
    73. SET @info=JSON_MODIFY(@info,'$.skills',JSON_QUERY('["C#","T-SQL","Azure"]'))
    74. PRINT @info
    75. --修改 JSON 对象
    76. DECLARE @RespData NVARCHAR(max)=N'{"code": "000","message": "成功","data": {"secretKey": "","content": "{\"rule_result\":{\"risk_level\":\"\",\"reason_code\":[],\"hitted_rules\":[]}}"}}'
    77. declare @content NVARCHAR(max)=JSON_VALUE(@RespData,'$.data.content')
    78. SET @content=JSON_MODIFY(@content,'$.rule_result.hitted_rules',JSON_QUERY(N'[{"name":"ZZC_CRS0027","description":"申请人最近7天到30天在网贷机构出现过","rule_type":"跨机构比对","risk_level":"M"}]'))
    79. SET @RespData=JSON_MODIFY(@RespData,'$.data.content',@content)
    80. --select @content,@RespData
    81. select JSON_VALUE(@RespData,'$.code'),JSON_VALUE(@RespData,'$.message'),JSON_VALUE(@RespData,'$.data.content'),JSON_VALUE(JSON_VALUE(@RespData,'$.data.content'),'$.rule_result.hitted_rules[0].name')
    82. --https://learn.microsoft.com/zh-cn/sql/t-sql/functions/json-value-transact-sql?view=sql-server-ver16
    83. --drop table [Families]
    84. --Test
    85. DECLARE @JSONText NVARCHAR(MAX);
    86. SET @JSONText = '{"info": {"address": [{"town": "Belgrade"}, {"town": "Paris"}, {"town":"Madrid"}]}}';
    87. SELECT @JSONText
    88. SET @JSONText = JSON_MODIFY(@json, '$.info.address[1].town', 'London');
    89. SET @JSONText = JSON_MODIFY(@json, 'append $.info.address', N'{"town":"BeiJing"}');
    90. SELECT @JSONText
  • 相关阅读:
    【毕业设计】基于stm32的便携用电功率统计系统 -物联网 嵌入式 单片机
    Python攻防-AndroidMainfest数据自动化解析
    ASP.NET Core 开发 Web API
    慢SQL排查定位
    上海计算机学会 2024年4月月赛 丙组T5 数字迷宫
    Treap 学习笔记
    CSS的弹性布局
    Spring Security 集成 Authing CAS 认证(三)
    SpringDataJPA-02-增删改查的基本实现
    火遍国内外IT技术圈,豆瓣 9.7!这本技术书籍直接封神了
  • 原文地址:https://blog.csdn.net/hofmann/article/details/132633968