OPENJSON 在 SQL Server 中不起作用?

Posted

技术标签:

【中文标题】OPENJSON 在 SQL Server 中不起作用?【英文标题】:OPENJSON does not work in SQL Server? 【发布时间】:2016-07-28 00:23:16 【问题描述】:

我想在 SQL Server 2016 中使用 JSON 函数,但是当我尝试执行 OPENJSON 函数时,我收到以下错误:

消息 208,第 16 级,状态 1,第 1 行 无效的对象名称“openjson”。

为什么它不起作用?我有 SQL Server 2016 RC 版本。

【问题讨论】:

你能把所有的SQL都贴出来吗? 也选择@@version 信息会有所帮助 【参考方案1】:

您能检查一下数据库的兼容性级别吗? OPENJSON 在兼容级别 130 下可用。您可以尝试执行吗:

ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = 130

另外,如果您在 Azure SQL 数据库上使用 JSON,请注意即使是新数据库也是在 120 兼容级别下创建的,因此如果您想使用 OPENJSON,您应该更改它。 此外,如果您在 Azure SQL 数据库中使用它,请运行 select @@version 以查看此 V12 服务器。您应该会看到如下内容:

Microsoft SQL Azure (RTM) - 12.0.2000.8 2016 年 3 月 25 日 15:11:30 版权所有 (c) 微软公司

如果您看到一些较低版本(例如 11.xxx),您可能在不支持 JSON 的旧架构上拥有数据库。

问候,

乔万

【讨论】:

感谢 Jovan,这是因为兼容性级别。它适用于 130。 现在我的错误是“数据库兼容级别的有效值为 90、100 或 110”。 您说的是 Azure SQL 数据库还是某些 SQL Server 版本? Azure SQL 应该具有所有可用的兼容性级别。 欲了解更多信息,请阅读:asptricks.net/2017/07/invalid-object-name-openjson-in-sql.html @DurgeshPandey 如果您运行 SELECT @@VERSION,您将看到您正在运行 SQL Server 2012(兼容级别 110),因此错误消息告诉您无法更改版本的兼容级别比您拥有的更新的 SQL Server,即 SQL Server 2016(兼容级别 130)。

以上是关于OPENJSON 在 SQL Server 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 openjson 读取存储在 SQL Server 中的 Json 列下方?

使用 C# 和 OPENJSON 将 JSON 插入 SQL Server 2016

如何反转 SQL Server 中的 OPENJSON() 函数?

SQL Server 2016 存储过程中的串联 OPENJSON

是否可以在 SQL Server 中使用通配符作为 OPENJSON 的参数?

如何从 SQL Server 中的动态节点加载 OPENJSON