SQL Server 2014读取NVARCHAR列中保存的数组中的json值

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数据 完成后,我可以通过执

我有一个包含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数据

完成后,我可以通过执行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语句?