【问题标题】:OPENJSON - Incorrect syntax near the keyword 'with'OPENJSON - 关键字“with”附近的语法不正确
【发布时间】:2019-04-13 20:16:03
【问题描述】:

想知道是否有人能找出问题所在,当我从 [HubSpotCache] 以外的另一个数据库(仍在同一个 SQL 实例中)读取表时,我不断收到此错误。

消息 319,第 15 级,状态 1,第 33 行
关键字“with”附近的语法不正确。如果这个语句是一个公用表表达式、一个 xmlnamespaces 子句或一个更改跟踪上下文子句,则前面的语句必须以分号结束。

SELECT
    J.label
FROM
    [HubSpotCache].dbo.[ContactProperties] C
CROSS APPLY 
    OPENJSON(C.[OptionsAggregate])
    WITH (
            label NVARCHAR(100) N'$."value"'
         ) AS J
WHERE 
    ISJSON(C.[OptionsAggregate]) > 0

这是表的 OptionsAggregate 列中的值

[
  {
    "label": "China",
    "value": "China",
    "displayOrder": -1,
    "doubleData": 0.0,
    "hidden": false,
    "readOnly": false
  },
  {
    "label": "Singapore",
    "value": "Singapore",
    "displayOrder": -1,
    "doubleData": 0.0,
    "hidden": false,
    "readOnly": false
  }
]

【问题讨论】:

  • 您使用哪个版本的 SQL Server?
  • 检查数据库的兼容级别:SELECT name,compatibility_level FROM sys.databases - 至少要130才能实现openjson
  • 标题不反映问题。这与 CTE 无关。
  • “当查询在 [HubSpotCache] 数据库中运行时有效,但当它来自同一 SQL 实例上的另一个数据库时无效。” 然后是您正在运行查询的数据库on 肯定有一个不支持您正在使用的语法的兼容性设置。
  • 这不是重复的,而是it's related

标签: json sql-server tsql


【解决方案1】:

您使用的是哪个版本的 SQL Server?如果您有正确的 SQL Server 版本,那么很可能是 Compatibility LevelOPENJSON requires Compatibility Level 130,因此请检查您的兼容性级别,如果不是 130,请将其设置为 130 并尝试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2013-12-16
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    相关资源
    最近更新 更多