在T-SQL OPENJSON查询中转义字符

时间:2017-08-25 01:30:31

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

我有以下JSON数据

DECLARE @jsonData NVARCHAR(MAX)
SET @jsonData =
'{  
   "insertions":[  
      {  
         "id":"58735A79-DEA8-462B-B3EB-C2797CA9D44E",
         "last-modified":"2017-08-08 13:07:32",
         "label":"HelloWorld1"
      },
      {  
         "id":"00565BCD-4240-46CF-A48F-849CB5A8114F",
         "last-modified":"2017-08-08 13:11:38",
         "label":"HelloWorld12"
      }
   ]
}'

尝试从中进行选择:

SELECT
    *
FROM
    OPENJSON(JSON_QUERY(@jsonData,'$.insertions'))
WITH
    (uuid UNIQUEIDENTIFIER '$.id',
    modified DATETIME '$.last-modified',
    Label NVARCHAR(128) '$.label'
    )

它不喜欢上次修改过的字段中的破折号。

  

Msg 13607,Level 16,State 4,Line 18
  JSON路径格式不正确。意外的角色' - '在第6位找到。

有没有办法逃避查询中的短划线?如果没有破折号,一切正常。

根据需要支持JSON,我使用兼容级别= 130的SQL Server 2016

1 个答案:

答案 0 :(得分:10)

在字段名称周围添加双引号似乎可以正常工作

SELECT
    *
FROM
    OPENJSON(JSON_QUERY(@jsonData,'$.insertions'))
WITH
    (uuid UNIQUEIDENTIFIER '$.id',
    modified DATETIME '$."last-modified"',
    Label NVARCHAR(128) '$.label'
    )