このページの最後の例に従っていますhttps://www.sqlservercentral.com/forums/topic/using-msxml2-serverxmlhttp-within-stored-procedure-to-grab-source-of-html-page-and-テーブルに保存します。
データをプルしてテーブルにロードします。最後のステップで構文が間違っているように感じます。コードはデータを取得しますが、OPENJSON
間違っているため、データがテーブルに入れられません。どんな助けでも大歓迎です。
DECLARE @Object AS INT;
DECLARE @hr INT
DECLARE @json AS TABLE (Json_Table NVARCHAR(MAX))
DECLARE @pmidList NVARCHAR(MAX)
SET @PMIDLIST = '17784783,19505939,30166592'
DECLARE @url NVARCHAR(MAX)
SET @url = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&retmode=json&id='+ @pmidList
EXEC @hr = sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @Object OUT;
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
EXEC @hr = sp_OAMethod @Object, 'open', NULL, 'get',
@url OUT,
'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
EXEC @hr = sp_OAMethod @Object, 'send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
EXEC @hr = sp_OAMethod @Object, 'responseText', @json OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
INSERT INTO @json (Json_Table)
EXEC sp_OAGetProperty @Object, 'responseText'
-- select the JSON string
SELECT * FROM @json
-- Parse the JSON string
SELECT *
FROM OPENJSON((SELECT * FROM @json), N'$.result')
WITH (
[uid] NVARCHAR(MAX) N'$.uids.uid',
[title] NVARCHAR(MAX) N'$.uids.title' ,
[sortpubdate] NVARCHAR(MAX) N'$.uids.sortpubdate',
[epubdate] NVARCHAR(MAX) N'$.uids.epubdate'
)
EXEC sp_OADestroy @Object
返されるデータは次のとおりです。
{"header": {"type": "esummary",version": "0.3"},"result": {"uids": ["17784783","19505939","30166592"],"17784783": {"uid": "17784783","pubdate": "2007 Aug","epubdate": "2007 Jul 20", "source": "PLoS Comput Biol","title": "Pathway... ",
そして、解析することさえ可能かどうか疑問に思っています
編集データ追加
DECLARE @json NVARCHAR(MAX)
SET @json = '{
"header": {
"type": "esummary",
"version": "0.3"
},
"result": {
"uids": [
"17784783",
"19505939",
"30166592"
],
"17784783": {
"uid": "17784783",
"pubdate": "2007 Aug",
"epubdate": "2007 Jul 20",
"source": "PLoS Comput Biol",
"sortpubdate": "2007/08/01 00:00"
},
"19505939": {
"uid": "19505939",
"pubdate": "2009 Aug 1",
"epubdate": "2009 Jun 8",
"source": "Bioinformatics",
"sortpubdate": "2009/08/01 00:00"
},
"30166592": {
"uid": "30166592",
"pubdate": "2019 Jan",
"epubdate": "2018 Aug 30",
"source": "Oncogene",
"sortpubdate": "2019/01/01 00:00"
}
}
}'
print @json
SELECT * FROM OPENJSON((select * from @json), N'$.result')
WITH (
[uid] nvarchar(max) N'$.uids.uid' ,
[sortpubdate] nvarchar(max) N'$.uids.sortpubdate',
[epubdate] nvarchar(max) N'$.uids.epubdate'
)
必要な結果
17784783 2007/08/01 00:00 2007 Jul 20
19505939 2009/08/01 00:00 2009 Jun 8
30166592 2019/01/01 00:00 2018 Aug 30