2017-03-31 383 views
1

你知道在SQL Server中的新JSON_支持2016這樣 比方說,我在一排有這樣的數據獲取JSON數組的長度在SQL Server 2016

{ 
    "BaseBoarding": 1, 
    "PriceLineStrategy": "PerPersonPerNight", 
    "Currency": "EUR", 
    "BasePriceLineList": [ 
    { 
     "RoomTypeId": 1, 
     "PeriodId": 1, 
     "Price": 10.0 
    }, 
    { 
     "RoomTypeId": 1, 
     "PeriodId": 2, 
     "Price": 100.0 
    }, 
    { 
     "RoomTypeId": 1, 
     "PeriodId": 3, 
     "Price": 190.0 
    }, 
    { 
     "RoomTypeId": 2, 
     "PeriodId": 1, 
     "Price": 280.0 
    }, 
    { 
     "RoomTypeId": 2, 
     "PeriodId": 2, 
     "Price": 310.0 
    }, 
    { 
     "RoomTypeId": 2, 
     "PeriodId": 3, 
     "Price": 340.0 
    } 
    ] 
} 

我如何獲得的項目數「BasePriceLineList」以最高性能的方式,最好使用內置的JSON支持?

必要寫這樣的事:

SELECT JSON_ARRLEN(JsonDataCol, '$.BasePriceline') FROM MyTable 
WHERE Id = 1 

,並得到6作爲結果。

回答

2

使用,而不是一個變量表:

SELECT count(priceLineLists.RoomTypeId) 
FROM Mytable 
CROSS APPLY OPENJSON (JsonDataCol, N'$.BasePriceLineList') 
    WITH (
    RoomTypeId int) 
     AS priceLineLists 
+0

我將標誌着這是正確的答案,因爲它可以一次使用多行。 –

2

您可以將其轉換爲一個數據集,然後計算行數:

DECLARE @JSON NVARCHAR(4000) = N'{ 
    "BaseBoarding": 1, 
    "PriceLineStrategy": "PerPersonPerNight", 
    "Currency": "EUR", 
    "BasePriceLineList": [ 
    { 
     "RoomTypeId": 1, 
     "PeriodId": 1, 
     "Price": 10.0 
    }, 
    { 
     "RoomTypeId": 1, 
     "PeriodId": 2, 
     "Price": 100.0 
    }, 
    { 
     "RoomTypeId": 1, 
     "PeriodId": 3, 
     "Price": 190.0 
    }, 
    { 
     "RoomTypeId": 2, 
     "PeriodId": 1, 
     "Price": 280.0 
    }, 
    { 
     "RoomTypeId": 2, 
     "PeriodId": 2, 
     "Price": 310.0 
    }, 
    { 
     "RoomTypeId": 2, 
     "PeriodId": 3, 
     "Price": 340.0 
    } 
    ] 
}' 

select COUNT(*) 
FROM OPENJSON(@json, N'$.BasePriceLineList') 
WITH (RoomTypeID varchar(100) '$.RoomTypeId')