2016-07-24 12 views
2

PythonスクリプトでOPENJSONを使用して、SQLデータベースに基本的なJSONをインポートしようとしています。私は最初より複雑なJSONファイルを試しましたが、このポストのために単純化しました。ここで私が持っているものです。pypyodbc:OPENJSONキーワード "WITH"の近くの構文が正しくありません

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 Server Driver][SQL Server]Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.")

任意の考えは?私は同じpypyodbc /データベース設定で他のSQLクエリを実行することに成功しました。

+1

することが非常に重要バージョンでは利用できませんように、ケースには、データベースが実際にAzureのSQL DBである、あなたは、同様のバージョンを確認する必要がありますここではOPENJSONというSQL Serverは他のSQLエンジンで使用されていないTSQL固有のメソッドです。また、エラーは明らかです。あなたは 'WITH()'句を正しく使用していません(通常、メインクエリで名前で参照される 'SELECT'文のために予約されています)。実際、ここに含めるのは冗長かもしれません。常にManagement Studioでクエリをテストします。 – Parfait

答えて

6

データベースが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; 

注:OPEN JSONはDBMSにタグを付ける前の12.x

+1

これで問題が解決しました。ありがとう! – user1944673

関連する問題