OPENJSON 将值列转换为多行不起作用
Posted
技术标签:
【中文标题】OPENJSON 将值列转换为多行不起作用【英文标题】:OPENJSON Convert Value Column to Multiple Rows does not work 【发布时间】:2019-09-27 07:27:19 【问题描述】:我有一个结构简单的 JSON 文件。我尝试从这个 JSON 文件中提取数据到行中。
JSON 文件开头为:
["result":
["country":"Germany",
"parent":"xxxx",
"city":"Reit***",
"latitude":"",
我试过这段代码,都成功了。 查看最后 3 条语句及其结果。 我会在 SELECT 最后一条语句中期待多条记录。 我究竟做错了什么?
DECLARE @details VARCHAR(MAX)
Select @details =BulkColumn FROM OPENROWSET
(BULK 'folder/cmn_location', DATA_SOURCE='blogstorage', SINGLE_CLOB) as JSON;
IF (ISJSON(@details) = 1)
BEGIN PRINT 'Imported JSON is Valid' END
ELSE
BEGIN PRINT 'Invalid JSON Imported' END
SELECT @details as SingleRow_Column
--delivers one row Where
--SingleRow_Column=["result":[country":"Germany","parent":.....
SELECT * FROM OPENJSON(@details, '$')
--delivers one row. Where
--Key=0, value="result":["country":"Germany","parent":"xxx".....
SELECT * FROM OPENJSON(@details, '$.result')
--根本不提供行
现在出现错误消息,但没有数据
【问题讨论】:
【参考方案1】:这样试试
提示:我必须添加一些右括号...
DECLARE @YourJSON NVARCHAR(MAX)=
N'["result":
["country":"Germany",
"parent":"xxxx",
"city":"Reit***",
"latitude":""]]';
SELECT B.*
FROM OPENJSON(@YourJson) WITH(result NVARCHAR(MAX) AS JSON) A
CROSS APPLY OPENJSON(A.result) WITH(country NVARCHAR(1000)
,parent NVARCHAR(1000)
,city NVARCHAR(1000) ) B;
简而言之:
您的 JSON 是一个数组,包含至少一个对象 result
。 (可能有更多对象,但您显示的不够多)。
这个对象result
本身就是一个数组。因此,我们将WITH
与AS JSON
结合使用,另一个APPLY OPENJSON
使用返回为A.result
的嵌套数组。
【讨论】:
以上是关于OPENJSON 将值列转换为多行不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 选择中的多行 UITextView 不起作用
在 setState 不起作用后,Reactjs 将值作为道具传递