Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2016 (13.x) i nowsze wersje
usługi Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
— punkt końcowy analizy SQL w usłudze Microsoft Fabric
Warehouse w
bazie danych Microsoft Fabric SQL Database w usłudze Microsoft Fabric
Składnia JSON_VALUE wyodrębnia wartość skalarną z ciągu JSON.
Aby wyodrębnić obiekt lub tablicę z ciągu JSON zamiast wartości skalarnej, zobacz JSON_QUERY. Aby uzyskać informacje o różnicach między JSON_VALUE i JSON_QUERY, zobacz Porównanie JSON_VALUE i JSON_QUERY.
Transact-SQL konwencje składni
Syntax
JSON_VALUE ( expression , path [ RETURNING data_type ] )
Arguments
expression
Wyrażenie. Zazwyczaj nazwa zmiennej lub kolumny zawierającej tekst JSON.
Jeśli JSON_VALUE znajdzie kod JSON, który nie jest prawidłowy w wyrażeniu , zanim znajdzie wartość zidentyfikowaną przez ścieżkę, funkcja zwróci błąd. Jeśli JSON_VALUE nie znajdzie wartości zidentyfikowanej przez ścieżkę, skanuje cały tekst i zwraca błąd, jeśli znajdzie kod JSON, który nie jest prawidłowy nigdzie w wyrażeniu.
path
Ścieżka JSON określająca właściwość do wyodrębnienia. Aby uzyskać więcej informacji, zobacz Wyrażenia ścieżki JSON w a aparatu bazy danych SQL.
W programie SQL Server 2017 (14.x) i usłudze Azure SQL Database można podać zmienną jako wartość ścieżki.
Jeśli format ścieżki jest nieprawidłowy, JSON_VALUE zwraca błąd.
data_type
Zwraca wartość określoną w typie SQL. Obsługiwane tylko wtedy, gdy dane wejściowe są typem JSON. Obsługiwane typy SQL to: tinyint, smallint, int, bigint, decimal, numeryczny, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 i datetimeoffset.
Wartość zwracana
Jeśli RETURNING nie jest uwzględniona:
Zwraca pojedynczą wartość tekstową typu nvarchar(4000). Sortowanie zwróconej wartości jest takie samo jak sortowanie wyrażenia wejściowego.
Jeśli wartość jest większa niż 4000 znaków:
- W trybie
JSON_VALUElax zwraca wartośćNULL. - W trybie ścisłym
JSON_VALUEzwraca błąd.
Jeśli musisz zwrócić wartości skalarne większe niż 4000 znaków, użyj
OPENJSONzamiastJSON_VALUE. Aby uzyskać więcej informacji, zobacz OPENJSON.- W trybie
Jeśli RETURNING jest uwzględniona:
Zwraca wartość określoną w typie SQL. Obsługiwane typy SQL to: tinyint, smallint, int, bigint, decimal, numeryczny, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 i datetimeoffset.
Funkcje JSON działają tak samo, czy dokument JSON jest przechowywany w formacie varchar, nvarchar, czy natywnym typem danych json .
Remarks
Tryb lax i tryb ścisły
Rozważ następujący tekst JSON:
DECLARE @jsonInfo AS NVARCHAR (MAX);
SET @jsonInfo = N'{
"info":{
"type":1,
"address":{
"town":"Bristol",
"county":"Avon",
"country/region":"England"
},
"tags":["Sport", "Water polo"]
},
"type":"Basic"
}';
W poniższej tabeli porównaliśmy zachowanie JSON_VALUE w trybie lax i w trybie ścisłym. Aby uzyskać więcej informacji na temat opcjonalnej specyfikacji trybu ścieżki (lax lub strict), zobacz Wyrażenia ścieżki JSON w a aparatu bazy danych SQL.
| Path | Zwracana wartość w trybie lax | Zwracana wartość w trybie ścisłym | Więcej informacji |
|---|---|---|---|
| $ | NULL |
Error | Nie jest wartością skalarną. Użyj JSON_QUERY zamiast tego. |
| $.info.type | N'1' | N'1' | N/a |
| $.info.address.town | N'Bristol' | N'Bristol' | N/a |
| $.info." adres" | NULL |
Error | Nie jest wartością skalarną. Użyj JSON_QUERY zamiast tego. |
| $.info.tags | NULL |
Error | Nie jest wartością skalarną. Użyj JSON_QUERY zamiast tego. |
| $.info.type[0] | NULL |
Error | Nie tablica. |
| $.info.none | NULL |
Error | Właściwość nie istnieje. |
Examples
Przykład 1
W poniższym przykładzie użyto wartości właściwości town JSON i state w wynikach zapytania. Ponieważ JSON_VALUE zachowuje sortowanie źródła, kolejność sortowania wyników zależy od sortowania jsonInfo kolumny.
Note
(W tym przykładzie przyjęto założenie, że tabela o nazwie Person.Person zawiera kolumnę jsonInfo tekstu JSON i że ta kolumna ma strukturę pokazaną wcześniej w dyskusji na temat trybu lax i trybu ścisłego. W przykładowej AdventureWorks bazie danych Person tabela nie zawiera kolumny jsonInfo .
SELECT FirstName,
LastName,
JSON_VALUE(jsonInfo, '$.info.address.town') AS Town
FROM Person.Person
WHERE JSON_VALUE(jsonInfo, '$.info.address.state') LIKE 'US%'
ORDER BY JSON_VALUE(jsonInfo, '$.info.address.town');
Przykład 2
Poniższy przykład wyodrębnia wartość właściwości town JSON do zmiennej lokalnej.
DECLARE @jsonInfo AS NVARCHAR (MAX);
DECLARE @town AS NVARCHAR (32);
SET @jsonInfo = N'{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}';
SET @town = JSON_VALUE(@jsonInfo, '$.info.address[0].town'); -- Paris
SET @town = JSON_VALUE(@jsonInfo, '$.info.address[1].town'); -- London
Przykład 3
Poniższy przykład tworzy obliczone kolumny na podstawie wartości właściwości JSON.
CREATE TABLE dbo.Store
(
StoreID INT IDENTITY (1, 1) NOT NULL,
Address VARCHAR (500),
jsonContent NVARCHAR (4000),
Longitude AS JSON_VALUE(jsonContent, '$.address[0].longitude'),
Latitude AS JSON_VALUE(jsonContent, '$.address[0].latitude')
);
Przykład 4
Poniższy przykład wyodrębnia wartość z tablicy JSON przy użyciu metody JSON_VALUE i zwraca wartość jako wartość typu daty.
DECLARE @j AS JSON = '[1, 1.3333, true, "a", "1", "2025-01-01"]';
SELECT JSON_VALUE(@j, '$[5]' RETURNING date) AS date_value;
date_value
--------
2025-01-01