Je suis allé en arrière et en avant sur ce point, mais perplexe. J'ai un fichier qui a plusieurs lignes JSON dans plusieurs objets.Lignes Json (fichier .jsonl) & SQL Server 2016
J'ai mis deux lignes ci-dessous.
{
"mental_health_act_legal_status":
[
{"legal_status_classification": "16", "start_time": "16:32", "expiry_date": "20171014", "expiry_time": "20:28", "start_date": "20170912"},
{"legal_status_classification": "07", "start_time": "01:31", "expiry_date": "20170922", "expiry_time": "17:53", "start_date": "20170820"},
{"legal_status_classification": "36", "start_time": "00:25", "expiry_date": "20170909", "expiry_time": "18:08", "start_date": "20170801"},
{"legal_status_classification": "18", "start_time": "18:26", "expiry_date": "20170801", "expiry_time": "12:40", "start_date": "20170724"},
{"legal_status_classification": "18", "start_time": "10:26", "expiry_date": "20170801", "expiry_time": "03:07", "start_date": "20170623"},
{"legal_status_classification": "18", "start_time": "04:11", "expiry_date": "20170621", "expiry_time": "12:51", "start_date": "20170601"},
{"legal_status_classification": "17", "start_time": "07:54", "expiry_date": "20170605", "expiry_time": "05:04", "start_date": "20170512"},
{"legal_status_classification": "31", "start_time": "02:41", "expiry_date": "20170520", "expiry_time": "11:14", "start_date": "20170920"},
{"legal_status_classification": "03", "start_time": "23:17", "expiry_date": "20170504", "expiry_time": "06:29", "start_date": "20170925"},
{"legal_status_classification": "05", "start_time": "17:41", "expiry_date": "20170403", "expiry_time": "01:23", "start_date": "20170331"},
{"legal_status_classification": "36", "start_time": "05:05", "expiry_date": "20170322", "expiry_time": "14:30", "start_date": "20170312"},
{"legal_status_classification": "03", "start_time": "03:45", "expiry_date": "20170310", "expiry_time": "11:56", "start_date": "20170213"},
{"legal_status_classification": "01", "start_time": "14:03", "expiry_date": "20170201", "expiry_time": "06:02", "start_date": "20170118"},
{"legal_status_classification": "09", "start_time": "07:07", "expiry_date": "20170121", "expiry_time": "22:15", "start_date": "20170111"}
],
"system": {"record_id": "1484925971009999954", "provider_record_id": "RTD 0167983 0000046", "sus_version": "20170927072844117", "spell_id": "1484925971009999954"}
}
{
"mental_health_act_legal_status":
[
{"legal_status_classification": "15", "start_time": "18:51", "expiry_date": "20170919", "expiry_time": "23:04", "start_date": "20170904"},
{"legal_status_classification": "19", "start_time": "06:11", "expiry_date": "20170908", "expiry_time": "09:17", "start_date": "20170818"},
{"legal_status_classification": "15", "start_time": "20:36", "expiry_date": "20170818", "expiry_time": "07:44", "start_date": "20170723"},
{"legal_status_classification": "01", "start_time": "16:12", "expiry_date": "20170809", "expiry_time": "21:25", "start_date": "20170718"},
{"legal_status_classification": "09", "start_time": "06:06", "expiry_date": "20170707", "expiry_time": "18:10", "start_date": "20170615"},
{"legal_status_classification": "07", "start_time": "11:53", "expiry_date": "20170625", "expiry_time": "14:09", "start_date": "20170527"},
{"legal_status_classification": "19", "start_time": "07:13", "expiry_date": "20170529", "expiry_time": "00:39", "start_date": "20170503"},
{"legal_status_classification": "35", "start_time": "16:01", "expiry_date": "20170521", "expiry_time": "07:18", "start_date": "20170912"},
{"legal_status_classification": "35", "start_time": "02:45", "expiry_date": "20170430", "expiry_time": "06:47", "start_date": "20170902"},
{"legal_status_classification": "03", "start_time": "19:51", "expiry_date": "20170410", "expiry_time": "18:46", "start_date": "20170319"},
{"legal_status_classification": "13", "start_time": "20:58", "expiry_date": "20170310", "expiry_time": "10:52", "start_date": "20170220"},
{"legal_status_classification": "02", "start_time": "13:11", "expiry_date": "20170217", "expiry_time": "00:42", "start_date": "20170127"},
{"legal_status_classification": "15", "start_time": "18:23", "expiry_date": "20170209", "expiry_time": "20:03", "start_date": "20170120"},
{"legal_status_classification": "07", "start_time": "00:59", "expiry_date": "20170119", "expiry_time": "12:33", "start_date": "20161231"}
],
"system": {"record_id": "1484925971009999916", "provider_record_id": "RTD 0167983 0000084", "sus_version": "20170927072844117", "spell_id": "1484925971009999916"}
}
Si j'utilise la syntaxe openjson
, je peux l'obtenir pour charger une section que je veux l'une des tables, mais une seule ligne dans le fichier est chargé; mais je dois passer par le fichier entier.
J'ai ensuite regardé un fichier .fmt à partir d'un message here mais d'après ce que je peux dire à partir de l'utilisation de ce point jusqu'à présent, les lignes JSON doivent toutes aller à la même table. Vous ne pouvez pas avoir plusieurs objets allant à plusieurs tables dans la ligne ou il ne sait pas où les diviser.
Mon code pour obtenir cela en SQL, pour deux tables couvrant le système et loi sur la santé mentale statut juridique est:
DECLARE @JSON NVARCHAR(MAX)
SET @JSON = (SELECT J.*
FROM OPENROWSET
(BULK 'C:\Users\DACR9\Desktop\ECDS_DATA\emergency_care_report.jsonl', SINGLE_CLOB)
AS j)
SELECT * FROM OPENJSON (@JSON, '$.system')
WITH ([SUS_VERSION] VARCHAR (255) '$.sus_verion',
[SPELL_ID] VARCHAR (255) '$.spell_id',
[RECORD_ID] VARCHAR (255)'$.record_id',
[PROVIDER_RECORD_ID] VARCHAR (255) '$.provider_record_id'
)
SELECT [record_id], [legal_status_classification], [start_date], [start_time], [expiry_date], [expiry_time]
FROM OPENROWSET (BULK 'C:\Users\DACR9\Desktop\ECDS_DATA\emergency_care_report.jsonl', SINGLE_CLOB) AS j
CROSS APPLY OPENJSON (BulkColumn, '$.mental_health_act_legal_status')
WITH (
[legal_status_classification] VARCHAR (255),
[start_time] VARCHAR (255),
[expiry_date] VARCHAR (255),
[expiry_time] VARCHAR (255),
[start_date] VARCHAR (255)
)
CROSS APPLY OPENJSON (BulkColumn, '$.system')
WITH (
[record_id] VARCHAR (255)
)
Est-on en mesure de fournir des conseils ou de l'aide ou la route à regarder s'il vous plaît .
Merci
Alors .. vous dites le premier 'SELECT * FROM OPENJSON (@JSON, '$ .system') 'ne renvoie que la première ligne? La première chose que je ferais est de vérifier que la variable '@ JSON' contient en effet plusieurs' 'system '':' rows –
Salut Nick. Il contient plusieurs lignes "système". System est la section obligatoire qui doit être présente car elle contient l'ID d'enregistrement généré par le système. Tout est techniquement optionnel, mais pour l'exemple que j'ai ajouté dans MHA. L'ID d'enregistrement est ce qui identifie les lignes MHA à un enregistrement individuel spécifique plutôt que d'être sans identificateur et record_id est le PK dans le bloc système. J'ai copié deux rangs et l'ai coupé juste à MHA et système pour le rendre plus facile à voir. – user1663003
Fondamentalement, rien n'indique que '' system ''est un enregistrement dans un tableau. Ma lecture autour de 'OPENJSON' indique que vous ne pouvez obtenir plusieurs enregistrements de tableaux JSON. Les tableaux JSON sont dans ce format: '[{une chose}, {autre chose}, {une autre}]'. Évidemment, vous n'avez pas le choix de changer le format de ce fichier. J'ai édité ma réponse ci-dessous. Ce n'est peut-être pas la fin, mais les échantillons semblent indiquer que c'est le format requis. –