Openjson表达式sql 2016

时间:2017-05-18 09:40:41

标签: sql sql-server json sql-server-2016

有没有办法可以在open json中将路径指定为变量,如下所示?

DECLARE @JSON NVARCHAR(MAX)

 set @JSON = '{ "amounts": [
    {
      "Charge_Id": "368",
      "Amount": "800",
      "FineType_Id": 3,
      "user_id": 2
    },
    {
      "Charge_Id": "368",
      "Amount": "600",
      "FineType_Id": 4,
      "user_id": 2
    }
  ]

  }';


DECLARE @counter int
DECLARE @expression NVARCHAR(50)
set @counter = 0
set @expression = ‘$.amounts[‘+CONVERT(NVARCHAR(10),@counter)+’]’

SELECT *
FROM OPENJSON(@JSON,@expression)
WITH(Charge_Id int, Amount money, FineType_Id int, user_id int)AS JSON

因为这会导致错误

  

Msg 102,Level 15,State 1,Line 31语法不正确   '@表达'。消息319,级别15,状态1,行32语法不正确   靠近关键字'with'。如果此语句是公用表   表达式,xmlnamespaces子句或更改跟踪上下文   子句,前一个语句必须以分号结束。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

It looks like the compatibility level doesn't match with SQL 2016。您需要检查并更改此设置。致view or change your compatibility level

  
      
  1. 连接到SQL Server数据库引擎的相应实例后,在对象资源管理器中,单击服务器名称。

  2.   
  3. 展开数据库,并根据数据库选择用户数据库或展开系统数据库并选择系统数据库。

  4.   
  5. 右键单击数据库,然后单击“属性”。

         

    将打开“数据库属性”对话框。

         

    在“选择页面”窗格中,单击“选项”。

  6.   
  7. 当前兼容级别显示在兼容级别列表框中。

  8.   
  9. 要更改兼容级别,请从列表中选择其他选项。选项包括SQL Server 2008(100),SQL Server 2012(110),SQL Server 2014(120),SQL Server 2016(130)和SQL Server 2017(140)。

  10.