Эта ссылка 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 в этом случае. Единственное, что бросается в глаза, это курсор, но это не так.