【问题标题】:pypyodbc: OPENJSON incorrect syntax near keyword "WITH"pypyodbc:关键字“WITH”附近的 OPENJSON 语法不正确
【发布时间】:2016-07-24 19:04:10
【问题描述】:

我正在尝试在 Python 脚本中使用 OPENJSON 将一些基本的 JSON 导入 SQL 数据库。我最初尝试使用更复杂的 JSON 文件,但为了这篇文章而对其进行了简化。这是我所拥有的:

sql_statement = "declare @json nvarchar(max) = '{\"name\":\"James\"}'; SELECT * FROM OPENJSON(@json) WITH (name nvarchar(20))" 
cursor.execute(sql_statement)
cursor.commit()
connection.close()

我收到的错误:

pypyodbc.ProgrammingError: (u'42000', u"[42000] [Microsoft][ODBC SQL 服务器驱动程序][SQL Server]关键字“with”附近的语法不正确。如果 该语句是一个公共表表达式,一个 xmlnamespaces 子句 或更改跟踪上下文子句,前面的语句必须是 以分号结尾。")

对我为什么会看到此错误有任何想法吗?我成功地能够使用相同的 pypyodbc / 数据库配置执行其他 SQL 查询。

【问题讨论】:

  • 在此处将 DBMS 标记为 SQL Server 非常重要,因为OPENJSON 是其他 SQL 引擎不使用的特定于 TSQL 的方法。此外,错误似乎很明显。您没有正确使用 WITH() 子句(通常保留给主查询中名称引用的 SELECT 语句)。实际上,在这里包含可能是多余的。除了 - 总是在 Management Studio 中测试查询。

标签: python sql sql-server json pypyodbc


【解决方案1】:

问题可能是您的数据库运行在较旧的兼容级别,其中 OPEN JSON 不可用。

要查找数据库的兼容级别,请运行以下 SQL 语句:

SELECT compatibility_level  FROM sys.databases WHERE name = 'your_db_name';

如果结果为 120 或更低,您需要通过运行将兼容级别更新为 130:

ALTER DATABASE your_db_name SET COMPATIBILITY_LEVEL = 130;

注意:如果您的数据库实际上是 Azure SQL DB,您还应该检查版本,因为 OPEN JSON 不适用于 12.x 之前的版本

【讨论】:

  • 也解决了我的问题!
猜你喜欢
  • 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
相关资源
最近更新 更多