【问题标题】:FOR JSON PATH produces unexpected xml declarationFOR JSON PATH 产生意外的 xml 声明
【发布时间】:2020-12-29 19:14:05
【问题描述】:

我使用的是 SSMS 版本 13.0.16106.4。我正在尝试检索我的查询结果:

SELECT TOP 10 *
FROM my_table
ORDER BY NEWID()
FOR JSON PATH

这会在结果窗口中生成指向查询生成的 JSON 的链接。但是,当我单击该链接时,出现以下错误:

无法显示 XML。发生以下错误: 意外的 XML 声明。 XML 声明必须是文档中的第一个节点,并且它之前不允许出现空白字符。第 1 行,位置 431。 一种解决方案是增加从服务器检索 XML 数据的字符数。要更改此设置,请在“工具”菜单上单击“选项”。

我尝试增加 XML 结果的数据大小限制,但没有奏效。似乎 SSMS 出于某种原因将 JSON 视为 XML,并且可能正在尝试对其进行解析。

【问题讨论】:

  • 您是否尝试过更新到 SSMS 的更新版本?
  • 我不能。我在企业系统上。我无权更新。这会与 SSMS 的版本有关吗?
  • “无法显示 XML。” 是 SSMS 错误,所以是的。
  • 所以,我在本地机器(SSMS 版本 15.0.18142.0)上尝试了一个类似的查询,它工作正常。但是,我使用的表格和数据不同,所以我不能肯定地说这是问题所在。我还在旧版本的 SSMS 上尝试了不同的查询并得到了工作结果:SELECT TOP 10 * FROM INFORMATION_SCHEMA.COLUMNS ORDER BY NEWID() FOR JSON PATH
  • 与任何错误一样,我总是建议先更新到受支持的版本。

标签: json xml ssms


【解决方案1】:

SSMS 不能很好地处理 JSON 表示。

请尝试 Microsoft 的 Azure Data Studio。它知道如何正确处理 JSON。 Azure Data Studio 会与最新版本的 SSMS 一起自动安装。

Download SQL Server Management Studio (SSMS)

这是官方 MS 文档的摘录:

重要

从 SQL Server Management Studio (SSMS) 18.7、Azure 数据开始 Studio 与 SSMS 一起自动安装。 SQL Server 用户 Management Studio 现在能够从创新和 Azure Data Studio 中的功能。 Azure Data Studio 是一个跨平台的 适用于您的环境的开源桌面工具,无论是在 云、本地或混合。

【讨论】:

    【解决方案2】:

    我发现了问题。我试图查询的数据最初在其中一列中有 XML 作为 NVARCHAR。这会导致解析器出现问题,因为它假定它是格式错误的 XML 而不是 JSON。

    这可以使用以下查询在 SSMS 版本 13.0.16106.4 和 15.0.18142.0 中忠实再现:

    SELECT *
    FROM (
        VALUES
            ('<?xml version="1.0" encoding="utf-16"?><Data>Test</Data>')
    ) A (XMLData)
    FOR JSON PATH
    

    似乎是将 XML 存储为 NVARCHAR 的错误或意外结果。

    编辑: 甚至以下查询也会使解析器感到困惑:

    SELECT *
    FROM (
        VALUES
            ('<')
    ) A (XMLData)
    FOR JSON PATH
    

    其他人显然遇到了这个问题或 FOR JSON PATH 的类似问题: https://feedback.azure.com/forums/908035-sql-server/suggestions/39312790-json-preview-feature-is-broken-in-sql-server

    https://feedback.azure.com/forums/908035-sql-server/suggestions/35650255-ssms-should-not-display-json-as-xml

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 2022-01-03
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      相关资源
      最近更新 更多