【问题标题】:Convert result in Json format in SQL Server 2014 [duplicate]在 SQL Server 2014 中将结果转换为 Json 格式 [重复]
【发布时间】:2020-03-03 11:32:09
【问题描述】:

我想对表执行选择查询,我需要 JSON 格式的结果。 我只想在 SQL Server 2014 中使用查询来做到这一点。

我的数据如下。

DECLARE @Country TABLE (id INT, [CounrtyName] Varchar(30) )
INSERT INTO @Country VALUES (1,'India')
INSERT INTO @Country VALUES (1,'BAN')
INSERT INTO @Country VALUES (1,'USA')
INSERT INTO @Country VALUES (2,'Japan')
INSERT INTO @Country VALUES (2,'China')
INSERT INTO @Country VALUES (3,'Switzerland')
INSERT INTO @Country VALUES (4,'')

我的结果应该如下:

id  CounrtyName
1   {"India":"BAN":"USA"}
2   {"Japan":"China"}
3   {"Switzerland"}
4

谁能建议我查询上述数据。

谢谢

【问题讨论】:

  • 到目前为止你尝试过什么? FOR JSON 在 SQL Server 2014 中不可用(尽管正如 Martin 提到的,这不是有效的 JSON 数据),但归根结底,这只是用大括号 (:) 分隔的字符串 ( {}); STUFFFOR XML PATH 在 SQL Server 2014 中都可用。
  • 这能回答你的问题吗? Comma separated results in SQL
  • 这是无效的 JSON:{"India":"BAN":"USA"}
  • 请注意,您建议的格式不是 JSON。具体来说,JSON 是一种键/值格式; {"India":"BAN":"USA"} 无效。在 JSON 中,更自然地表示为 {"Countries": ["India","BAN","USA"]} 或类似名称。
  • 抱歉,我需要 {"India","BAN","USA"} 格式,不带 Key

标签: sql-server


【解决方案1】:

您的预期输出看起来不像 JSON。话虽如此,您可以使用以下内容来生成预期结果:

SELECT id, '{' + STUFF((
    SELECT ',"' + NULLIF(CountryName, '') + '"'
    FROM @country AS y
    WHERE y.id = x.id
    FOR XML PATH('')
), 1, 1, '') + '}'
FROM @country AS x
GROUP BY id

【讨论】:

  • 我收到“'STRING_ESCAPE' 不是可识别的内置函数名”错误
  • 您使用的是哪个版本的 SQL Server?
  • string_escape 在 2016 年版本中引入,string_agg 在 2017 年引入。OP 正在使用 2014 版本,这意味着没有内置的 JSON 支持,因此问题...
  • 我用的是2014版
  • @Bhushan 查看修改后的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2021-01-30
  • 2010-11-17
相关资源
最近更新 更多