Передайте JSON напрямую в SQL Server 2016 - PullRequest
0 голосов
/ 04 октября 2019

Я хотел бы передать объект JSON в хранимую процедуру SQL Server 2016 без десериализации объекта и позволить базе данных обрабатывать данные.

Я передаю:

DECLARE @json NVarChar(2048) = N'[{
    "PMID": "31390573",
    "pubdate": "2019",
    "data": {
        "memberID": "1692",
        "pmid": "31390573",     
        "sortpubdate": "2019/08/06 00:00",
        "pmc": "PMC6733019"
    }
}, {
    "PMID": "31213464",
    "pubdate": "2019",
    "data": {
        "memberID": "1692",
        "pmid": "31213464",     
        "sortpubdate": "2019/08/15 00:00",
        "pmc": "PMC6753942"
    }
}, {
    "PMID": "31130363",
    "pubdate": "2019",
    "data": {
        "memberID": "1692",
        "pmid": "31130363",     
        "sortpubdate": "2019/06/20 00:00",
        "pmc": "PMC6588466"
    }
}]'

Если я использую

SELECT * FROM OPENJSON(@json);

Я получу

0   {   "PMID": "31390573",   "pubdate": "2019",   "data": {    "memberID": "1692",    "pmid": "31390573",      "sortpubdate": "2019/08/06 00:00",    "pmc": "PMC6733019"   }  }    5
1   {   "PMID": "31213464",   "pubdate": "2019",   "data": {    "memberID": "1692",    "pmid": "31213464",      "sortpubdate": "2019/08/15 00:00",    "pmc": "PMC6753942"   }  }    5
2   {   "PMID": "31130363",   "pubdate": "2019",   "data": {    "memberID": "1692",    "pmid": "31130363",      "sortpubdate": "2019/06/20 00:00",    "pmc": "PMC6588466"   }  }    5

Я бы хотел закончитьс таблицей с одним столбцом для элементов в элементе данных, поэтому столбец для memberID - pmid --sortpubdate - pmc.

memberID    pmid        sortpubdate
------------------------------------------------
1692        31390573    2019-08-06 00:00:00.0000000
1692        31213464    2019-08-15 00:00:00.0000000
1692        31130363    2019-06-20 00:00:00.0000000

Возможно ли это? Если бы это был XML, его можно было бы разорвать и обработать.

1 Ответ

0 голосов
/ 04 октября 2019

Я нашел свой ответ и оставлю его здесь на случай, если кому-то еще понадобится

SELECT *  
FROM OPENJSON(@json)  
  WITH ( 
        memberID int '$.data.memberID', pmid int '$.data.pmid',  
         sortpubdate datetime2 '$.data.sortpubdate') 
END
...