【问题标题】:Return values from json data in SQL Server 2016从 SQL Server 2016 中的 json 数据返回值
【发布时间】:2018-09-17 20:09:18
【问题描述】:

在 SQL Server 2016 中,如何使用示例代码返回“PageSize”、“Total”和“NumberOfPages”值?我正在提取没有数据的列标题。

我想看看:

SQL query output

代码:

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)

【问题讨论】:

    标签: json sql-server-2016


    【解决方案1】:

    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]
    

    【讨论】:

    • 谢谢蒂姆。这样可行!我还遇到了另一种有效的方法:
    • SELECT top 1 JSON_VALUE(@jsonData, '$.PageSize') AS [PageSize], JSON_VALUE(@jsonData, '$.Total') AS [Total], JSON_VALUE(@jsonData, '$ .NumberOfPages') AS [NumberOfPages] FROM OPENJSON(@jsonData)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多