Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Az SQL Server 2016 (13.x) és újabb verziói
Az Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Analytics végpontja a Microsoft Fabric
Warehouse-ban a Microsoft Fabric
SQL Database-ben a Microsoft Fabricben
A JSON_VALUE szintaxis egy Skaláris értéket nyer ki egy JSON-sztringből.
Ha skaláris érték helyett JSON-sztringből szeretne kinyerni egy objektumot vagy tömböt, olvassa el a JSON_QUERY. A különbségekről JSON_VALUEJSON_QUERYa JSON_VALUE és a JSON_QUERY összehasonlítása című témakörben olvashat.
Transact-SQL szintaxis konvenciók
Syntax
JSON_VALUE ( expression , path [ RETURNING data_type ] )
Arguments
expression
Egy kifejezés. Általában egy JSON-szöveget tartalmazó változó vagy oszlop neve.
Ha JSON_VALUE a kifejezésben érvénytelen JSON-t talál, mielőtt megkeresi az elérési út által azonosított értéket, a függvény hibát ad vissza. Ha JSON_VALUE nem találja az elérési út által azonosított értéket, a teljes szöveget megvizsgálja, és hibát ad vissza, ha olyan JSON-t talál, amely a kifejezésben sehol nem érvényes.
path
A kinyerni kívánt tulajdonságot meghatározó JSON-elérési út. További információ: JSON Path Expressions in the SQL Database Engine.
Az SQL Server 2017-ben (14.x) és az Azure SQL Database-ben megadhat egy változót az elérési út értékeként.
Ha az elérési út formátuma érvénytelen, JSON_VALUE hibát ad vissza.
data_type
Az SQL-típusban megadott értéket adja vissza. Csak akkor támogatott, ha a bemenet JSON-típus. A támogatott SQL-típusok: tinyint, smallint, int, bigint, decimal, numerikus, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 és datetimeoffset.
Visszaadott érték
Ha RETURNING nem szerepel a csomagban:
Egy nvarchar(4000) típusú szöveges értéket ad vissza. A visszaadott érték rendezése megegyezik a bemeneti kifejezés rendezésével.
Ha az érték nagyobb, mint 4000 karakter:
- Hasad módban a
JSON_VALUEvisszaadottNULLérték. - Szigorú módban
JSON_VALUEhibát ad vissza.
Ha 4000 karakternél nagyobb skaláris értékeket kell visszaadnia, használja ahelyett
OPENJSON, hogyJSON_VALUE. További információ: OPENJSON.- Hasad módban a
Ha RETURNING szerepel a csomagban:
Az SQL-típusban megadott értéket adja vissza. A támogatott SQL-típusok: tinyint, smallint, int, bigint, decimal, numerikus, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 és datetimeoffset.
A JSON-függvények ugyanúgy működnek, függetlenül attól, hogy a JSON-dokumentum varcharban, nvarcharban vagy natív JSON-adattípusban van tárolva.
Remarks
Hasadt mód és szigorú mód
Vegye figyelembe a következő JSON-szöveget:
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"
}';
Az alábbi táblázat a JSON_VALUE viselkedését hasonlítja össze laza módban és szigorú módban. Az opcionális elérésiút-mód specifikációjáról (lax vagy szigorú) további információt az SQL Database Engine JSON-elérésiút-kifejezéseiben talál.
| Path | Visszatérési érték hasadó módban | Érték visszaadott értéke szigorú módban | További információk |
|---|---|---|---|
| $ | NULL |
Error | Nem skaláris érték. A JSON_QUERY használható helyette. |
| $.info.type | N'1' | N'1' | N/a |
| $.info.address.town | N'Bristol' | N'Bristol' | N/a |
| $.info." cím" | NULL |
Error | Nem skaláris érték. A JSON_QUERY használható helyette. |
| $.info.tags | NULL |
Error | Nem skaláris érték. A JSON_QUERY használható helyette. |
| $.info.type[0] | NULL |
Error | Nem tömb. |
| $.info.none | NULL |
Error | A tulajdonság nem létezik. |
Examples
1. példa
Az alábbi példa a JSON-tulajdonságok townstate és a lekérdezési eredmények értékeit használja. Mivel JSON_VALUE megőrzi a forrás rendezését, az eredmények rendezési sorrendje az oszlop rendezésétől jsonInfo függ.
Note
(Ez a példa feltételezi, hogy egy névvel ellátott Person.Person tábla JSON-szövegoszlopot jsonInfo tartalmaz, és hogy ez az oszlop a korábban a hasáb mód és a szigorú mód megvitatása során látható struktúrával rendelkezik. AdventureWorks A mintaadatbázisban a Person tábla valójában nem tartalmaz oszlopot 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');
2. példa
Az alábbi példa a JSON tulajdonság town értékét egy helyi változóba nyeri ki.
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
3. példa
Az alábbi példa a JSON-tulajdonságok értékei alapján hoz létre számított oszlopokat.
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')
);
4. példa
Az alábbi példa egy JSON-tömbből JSON_VALUE nyer ki egy értéket dátumtípus-értékként, és visszaadja az értéket.
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