SQL Server 2014读取NVARCHAR列中保存的数组中的json值
我有一个包含3列的表:SQL Server 2014读取NVARCHAR列中保存的数组中的json值,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,我有一个包含3列的表: id INT, name NVARCHAR(50), myData NVARCHAR(MAX) myData只是保存一个json字符串数组,类似于 ["Fingers"] ["Fingers","Right-"] ["Arm","Fingers","Left-"] 我想选择1列中的所有值,例如 Fingers Fingers Right- Arm Fingers Left- 我该怎么办?我不相信SQL Server 2014可以读取JSON数据 完成后,我可以通过执
id INT, name NVARCHAR(50), myData NVARCHAR(MAX)
myData只是保存一个json字符串数组,类似于
["Fingers"]
["Fingers","Right-"]
["Arm","Fingers","Left-"]
我想选择1列中的所有值,例如
Fingers
Fingers
Right-
Arm
Fingers
Left-
我该怎么办?我不相信SQL Server 2014可以读取JSON数据
完成后,我可以通过执行select DISTINCT语句来选择每个唯一的值
我需要能够用T-SQL实现这一点,并且不能创建任何函数来处理这一点,只能使用T-SQL
非常感谢您的帮助。请使用这个,其中[json]是您的原始表格:
;with [data] as
(
select [mydata] = replace(replace(replace([mydata], '[', SPACE(0)), ']', space(0)), '"', space(0)) from [#json]
)
,[split] as
(
select
[mydata] = [s].[str]
from
[data] as [d]
cross apply
(
select
[str] = [x].[c].[value]('(./text())[1]', 'nvarchar(4000)')
from
(
select [x] = convert(xml, '<i>' + replace([d].[mydata], ',', '</i><i>') + '</i>').[query]('.')
) as [a]
cross apply
[x].[nodes]('i') as [x]([c])
) as [s]
)
select
[mydata]
from
[split];
完整测试查询:请使用此查询,其中[json]是您的原始表:
;with [data] as
(
select [mydata] = replace(replace(replace([mydata], '[', SPACE(0)), ']', space(0)), '"', space(0)) from [#json]
)
,[split] as
(
select
[mydata] = [s].[str]
from
[data] as [d]
cross apply
(
select
[str] = [x].[c].[value]('(./text())[1]', 'nvarchar(4000)')
from
(
select [x] = convert(xml, '<i>' + replace([d].[mydata], ',', '</i><i>') + '</i>').[query]('.')
) as [a]
cross apply
[x].[nodes]('i') as [x]([c])
) as [s]
)
select
[mydata]
from
[split];
完整测试查询:我认为这不是有效的json格式?JSON不需要键:值对吗?我认为您的JSON看起来像[{Array:[{{value:Fingers},{value:[{value:Fingers},{value:Right-}]},{value:[{value:Arm},{value:Fingers},{value:Left-}]}]。OPENJSON非常适合您的解决方案:请查看SqlServer 2016支持的@HardikMasalawala json。问题是,我们在2014年:我不认为这是一个有效的json格式?JSON不需要键:值对吗?我认为您的JSON看起来像[{Array:[{{value:Fingers},{value:[{value:Fingers},{value:Right-}]},{value:[{value:Arm},{value:Fingers},{value:Left-}]}]。OPENJSON非常适合您的解决方案:请查看SqlServer 2016支持的@HardikMasalawala json。问题是,我们在2014年:这太棒了。。。。只是问问。。有没有可能不带这个?只需使用SELECT语句?这太棒了。。。。只是问问。。有没有可能不带这个?只使用SELECT语句?