Ich habe Probleme beim Laden von Daten in JSON in einer Tabelle mit SQL Server.
Ich habe folgende Zeile aus einer Datei in CSV:
A: 15957
B: test_category_labeling_highlight_fordham_bbbbb
C: 116
D: 3864
E: 1
F: Policy Change
G: {"Change Type": {"selectedText": "Privacy Policy Last modified: June 30, 2015 (view archived versions)", "startIndexInSegment": 0, "endIndexInSegment": 79, "value": "Unspecified"} , "User Choice": {"selectedText": "Privacy Policy Last modified: June 30, 2015 (view archived versions)", "startIndexInSegment": 0, "endIndexInSegment": 79, "value": "Unspecified"}, " Notification Type ": {" selectedText ":" Privacy Policy Last modified: June 30, 2015 (view archived versions) "," startIndexInSegment ": 0," endIndexInSegment ": 79," value ":" General notice in privacy policy "} }
H: 6/30/15
I: https://www. google.com/intl/en/policies/privacy/
davon interessiere ich mich für die Spalten G, H, I.
Um die Daten zu laden, verwenden Sie
CREATE TABLE #tempTable1
(
a VARCHAR(max),
b VARCHAR(max),
c VARCHAR(max),
d VARCHAR(max),
e VARCHAR(max),
f VARCHAR(max),
g VARCHAR(max),
h VARCHAR(max),
i VARCHAR(max),
);
BULK INSERT #tempTable1
FROM 'C:\Users\file.csv'
WITH (FORMAT = 'CSV', ROWTERMINATOR = '\n', FIRSTROW = 2);
ALTER TABLE #tempTable1
DROP COLUMN a, b, c, d, e, f, h, i;
Bisher tut es mir gut, und ich bekomme in jeder Zeile eine Spalte mit Zellen von JSON-Werten {...}.
Und jetzt müsste ich diese generierte Tabelle irgendwie neu konvertieren. Die Werte der Spalten h und I sind gleich und nur der JSON ändert sich. Um besagten JSON in einer temporären Variablen zu deklarieren, hatte ich versucht
DECLARE @json varchar (max);
SELECT g INTO @json FROM #tempTable1;
aber ohne Erfolg, um später auf seine Schlüsselwerte zuzugreifen
INSERT INTO Data (G_1, G_2, E, F)
SELECT *
FROM OPENJSON (@JSON)
WITH (
G_1 VARCHAR(50) '$."Personal Information Type".value',
G_2 VARCHAR(100) '$."Purpose".value'
);
Es ist nicht klar, warum Sie die Spalten in ablegen #tempTable1
, insbesondere wenn Sie auf Spalten verweisen e
und f
in Ihrer insert into Data
Anweisung weiter unten:
ALTER TABLE #tempTable1
DROP COLUMN a, b, c, d, e, f, h, i;
Wenn die folgende Syntax korrekt wäre, würde es immer noch nur den Wert von g
für eine einzelne Zeile auswählen :
DECLARE @json varchar (max);
SELECT g INTO @json FROM #tempTable1;
Anstatt zu versuchen, mit dem @json
Wert zu arbeiten , versuchen Sie, die Daten #tempTable1
direkt zu bearbeiten, indem Sie etwas wie Folgendes verwenden:
insert into Data (G_1, G_2, E, F)
select G_1, G_2, E, F
from #tempTable1
cross apply openjson(g) with (
G_1 varchar(50) '$."Personal Information Type".value',
G_2 varchar(100) '$."Purpose".value'
);
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen