【问题标题】:SQL Query to overwrite the existing JSON Object覆盖现有 JSON 对象的 SQL 查询
【发布时间】:2020-04-25 19:07:42
【问题描述】:

我有以下 JSON 对象。我需要删除现有的 Object 值添加新的。

{
  "Model": [
    {
      "ModelName": "Test Model",    
      "Object": [
         {
           "ID": 1,
           "Name": "ABC",
         },
         {
           "ID": 11,
           "Name": "ABCD",
         },
         {
           "ID": 15,
           "Name": "ABCDE",
         },
   ]  
}]}

新的 JSON 对象应该更新到下面。我需要完全覆盖对象。

     {
      "Model": [
        {
          "ModelName": "Test Model",    
           "Object": [
              {
                 "ID": 156,
                 "Name": "ABCDEF",
              }             
           ]  
        }]}

【问题讨论】:

  • 你有什么问题?是什么阻止了你做你需要做的事?

标签: sql json sql-server sql-server-2019


【解决方案1】:

在第一步中,您需要通过CROSS APPLY 连接子句与OPENJSON() 函数一起导出要更改的部分(Object[0]),然后将JSON_MODIFY() 函数应用于更新为所需的值

SELECT 
       JSON_MODIFY(JsonData, '$.Model[0]', 
                   JSON_MODIFY(Model, '$.Object', 
                               JSON_QUERY('[{ "ID": 156, "Name": "ABCDEF" }]')) )
       AS JsonData                        
  FROM tab
 CROSS APPLY OPENJSON(JsonData)
             WITH ( Model  nvarchar(max) '$.Model[0]' AS JSON) AS Q0
 CROSS APPLY OPENJSON (Q0.Model) 
             WITH ( Object nvarchar(max) '$.Object' AS JSON ) Q1

Demo

【讨论】:

    【解决方案2】:

    我尝试了以下查询,它成功了。

    DECLARE @Objects TABLE (ID INT, NAME NVARCHAR(20))
    DECLARE @ObjectsJsonString NVARCHAR(MAX);
    
    INSERT INTO @Objects values (156, 'ABCDEF');
    INSERT INTO @Objects values (180, 'ABCDEFGH');
    
    SET @ObjectsJsonString = (SELECT ID,
                                     NAME
                                FROM @Objects
                                  FOR JSON AUTO)
    
    UPDATE ModelTable
      SET JSON_MODIFY(JsonData,'$.Model[0].Object',JSON_QUERY(@ObjectsJsonString))
        WHERE ModelID = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      相关资源
      最近更新 更多