Разбор и сохранение родительского / дочернего JSON в нескольких таблицах - PullRequest
0 голосов
/ 08 ноября 2018

Эта ссылка json part 3 open json показывает, как измельчать json в родительские дочерние записи.

Конкретно показывает, как генерировать несколько наборов результатов из одного документа Json

[
    {
      "CharacterID" : null,
      "CharacterName" : "Egwene Al''Vere",
      "IsFemale" : true,
      "Address" : {
        "AddressLine1" : "Emonds Field",
        "AddressLine2" : "The Two Rivers"
      },
      "Friends" : ["Rand Al''Thor", "Perrin Aybara", "Matrim Cauthon"],
      "Children" : null
    },
    {
      "CharacterID" : null,
      "CharacterName" : "Second Character",
      "IsFemale" : false,
      "Address" : {
        "AddressLine1" : "Emonds Field 2",
        "AddressLine2" : "The Three Rivers"
      },
      "Friends" : ["Jeff", "Zeke", "Sid Cauthon"],
      "Children" : null
    }
]   

SELECT
 JSON_VALUE(@json, '$.CharacterID') AS CharacterID,
 JSON_VALUE(@json, '$.CharacterName') AS CharacterName,
 JSON_VALUE(@json, '$.IsFemale') AS IsFemale,
 JSON_VALUE(@json, '$.Address.AddressLine1') AS AddressLine1,
 JSON_VALUE(@json, '$.Address.AddressLine2') AS AddressLine2,
 JSON_VALUE(@json, '$.Children') AS Children

SELECT
  JSON_VALUE(@json, '$.CharacterID') AS CharacterID,
  OJ.value AS Friend
FROM OPENJSON(@json, '$.Friends') OJ;

Я хотел бы написать процедуру для вставки этого документа в родительскую таблицу символов и дочернюю таблицу CharacterFriend, поддерживающую ссылки FK.

Если идентификатор не был предоставлен, было бы довольно легко выяснить, что именно он использует SCENTE IDENTITY, а затем заполнить его, прежде чем вставить в таблицу CharacterFriend.

Однако мне не совсем понятно, как вы обнаружили бы PK таблицы символов в том случае, если в документе json определены несколько символов.

Что было бы лучшим способом написать процедуру вставки, которая устанавливает этот FK в этом случае. Единственное, что бросается в глаза, это курсор, но это не так.

...