【发布时间】:2018-04-13 17:55:19
【问题描述】:
我想从 SQL Server 2012 读取 Json 数据,我知道它会支持在 SQL Server 2016 中读取 Json 数据,但我现在需要一种解决方法来读取它。
我有一列 Text 包含此 Json 代码:
{"en": "Green", "ar": "أخضر"}
我想要一个过程或函数给它语言前缀并将值返回给我。
【问题讨论】:
标签: sql sql-server json
我想从 SQL Server 2012 读取 Json 数据,我知道它会支持在 SQL Server 2016 中读取 Json 数据,但我现在需要一种解决方法来读取它。
我有一列 Text 包含此 Json 代码:
{"en": "Green", "ar": "أخضر"}
我想要一个过程或函数给它语言前缀并将值返回给我。
【问题讨论】:
标签: sql sql-server json
如果您在 SQL Server 2012 中寻找通用的 SQL Server JSON to Table 和 Table to JSON,这个article 提供了一个parseJSON 和一个dbo.ToJSON 函数。使用此代码,您可以运行以下代码:
select * from dbo.parseJSON('
{
"en": "Green",
"ar": "أخضر"
}
')
这个查询将返回
element_id | sequenceNo | parent_Id | Object_ID | Name | StringValue | ValueType
-----------+------------+-----------+-----------+------+-------------+-----------
1 | 0 | 1 | NULL | en | Green | string
2 | 0 | 1 | NULL | ar | أخضر | string
3 | 1 | NULL | 1 | - | | object
如果表中的某一列是 JSON 文档,则可以使用 CROSS APPLY:
create table dbo.test(ID int identity(1,1) , json varchar(max))
insert into dbo.test (json)
select '
{
"en": "Green",
"es": "Verde"
}
'
insert into dbo.test (json)
select '
{
"en": "Red",
"es": "Rojo"
}
select * from dbo.test t
cross apply (select * from dbo.parseJSON(json)) details
这将返回以下输出:
【讨论】: