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