Возвращаемые значения из данных json в SQL Server 2016 - PullRequest
0 голосов
/ 17 сентября 2018

В SQL Server 2016 как вернуть значения «PageSize», «Total» и «NumberOfPages» с моим примером кода?Я вытащил заголовки столбцов без данных.

Я хочу увидеть:

Вывод SQL-запроса

Код:

DECLARE @jsonData NVARCHAR(MAX)

SET @jsonData = N'{
  "PageSize": 500,
  "PageNumber": 2,
  "Total": 994,
    "Items": [
    {
      "Id": 23004801096147,
      "StatusName": "Open",
      "CompanyName": "Microsoft",
      "JobTitle": "Project Manager"
    },
    {
      "Id": 23004801096147,
      "StatusName": "Closed",
      "CompanyName": "Salesforce",
      "JobTitle": "Marketing Manager"
    }
 ],
      "NumberOfPages": 1024
}'

- Попробуйте 1

SELECT
JSON_VALUE(fh.value, '$.PageSize') AS [PageSize],
JSON_VALUE(fh.value, '$.Total') AS [Total],
JSON_VALUE(fh.value, '$.NumberOfPages') AS [NumberOfPages]
FROM OPENJSON(@jsonData, '$.FileHeader') as fh

- Попробуйте 2

SELECT 'PageSize' as 'PageSize', 'Total' as 'Total', 'NumberOfPages' as 
'NumberOfPages'
FROM OPENJSON(@jsonData, '$.FileHeader') as fh

- Попробуйте 3

SELECT 'PageSize' as 'PageSize', 'Total' as 'Total', 'NumberOfPages' as 
'NumberOfPages'
FROM OPENJSON(@jsonData) as fh

- Попробуйте 4

SELECT 'PageSize' as 'PageSize', 'Total' as 'Total', 'NumberOfPages' as 
'NumberOfPages'
FROM OPENJSON(@jsonData)

1 Ответ

0 голосов
/ 17 сентября 2018

SQL-сервер 2016+ JSON: https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server?view=sql-server-2017

Вот пример использования ваших данных:

   DECLARE @jsonData NVARCHAR(MAX)

   SET @jsonData = N'{
     "PageSize": 500,
     "PageNumber": 2,
     "Total": 994,
       "Items": [
       {
         "Id": 23004801096147,
         "StatusName": "Open",
         "CompanyName": "Microsoft",
         "JobTitle": "Project Manager"
       },
       {
         "Id": 23004801096147,
         "StatusName": "Closed",
         "CompanyName": "Salesforce",
         "JobTitle": "Marketing Manager"
       }
    ],
         "NumberOfPages": 1024
   }'

   --Using OPENJSON and "WITH"
   SELECT
   [PageSize]
   , [PageNumber]
   , [Total]
   , [NumberOfPages]
   FROM OPENJSON(@jsonData)
   WITH(
   [PageSize] BIGINT '$.PageSize'
   ,[PageNumber] BIGINT '$.PageNumber'
   ,[Total] BIGINT '$.Total'
   ,[NumberOfPages] BIGINT '$.NumberOfPages'
   )

   --This is how you could accomplish the same with JSON_VALUE
   SELECT
   JSON_VALUE(@jsonData, '$.PageSize') AS [PageSize],
   JSON_VALUE(@jsonData, '$.PageNumber') AS [PageNumber],
   JSON_VALUE(@jsonData, '$.Total') AS [Total],
   JSON_VALUE(@jsonData, '$.NumberOfPages') AS [NumberOfPages]
...