Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
SQL analiz uç noktası Microsoft Fabric'teki Microsoft Fabric
SQL veritabanında Microsoft Fabric'te
Söz JSON_VALUE dizimi bir JSON dizesinden skaler değer ayıklar.
Skaler değer yerine JSON dizesinden nesne veya dizi ayıklamak için bkz. JSON_QUERY. ile JSON_VALUEarasındaki JSON_QUERY farklar hakkında bilgi için bkz. JSON_VALUE ve JSON_QUERY karşılaştırma.
Transact-SQL söz dizimi kuralları
Syntax
JSON_VALUE ( expression , path [ RETURNING data_type ] )
Arguments
expression
Bir ifade. Genellikle JSON metni içeren bir değişkenin veya sütunun adıdır.
JSON_VALUE tarafından tanımlanan değeri bulmadan önce ifadede geçerli olmayan JSON bulursa işlev bir hata döndürür.
JSON_VALUE
Yol tarafından tanımlanan değeri bulamazsa, metnin tamamını tarar ve ifadenin herhangi bir yerinde geçerli olmayan JSON bulursa bir hata döndürür.
path
Ayıklanması gereken özelliği belirten bir JSON yolu. Daha fazla bilgi için bkz. SQL Veritabanı Altyapısı'nda JSON Yol İfadeleri.
SQL Server 2017'de (14.x) ve Azure SQL Veritabanı'nda yol değeri olarak bir değişken sağlayabilirsiniz.
Yol biçimi geçerli değilse bir JSON_VALUE hata döndürür.
data_type
SQL türünde belirtilen değeri döndürür. Yalnızca giriş bir JSON türündeyse desteklenir. Desteklenen SQL türleri şunlardır: tinyint, smallint, int, bigint, decimal, numeric, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 ve datetimeoffset.
Dönüş değeri
Dahil RETURNING değilse:
nvarchar(4000) türünde tek bir metin değeri döndürür. Döndürülen değerin harmanlanması, giriş ifadesinin harmanlaması ile aynıdır.
Değer 4000 karakterden büyükse:
- Lax modunda döndürür
JSON_VALUENULL. - Katı modda
JSON_VALUEbir hata döndürür.
4000 karakterden büyük skaler değerler döndürmeniz gerekiyorsa yerine kullanın
OPENJSONJSON_VALUE. Daha fazla bilgi için bkz. OPENJSON.- Lax modunda döndürür
Dahil edilirse RETURNING :
SQL türünde belirtilen değeri döndürür. Desteklenen SQL türleri şunlardır: tinyint, smallint, int, bigint, decimal, numeric, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 ve datetimeoffset.
JSON işlevleri, JSON belgesinin varchar, nvarchar veya yerel json veri türünde depolanmasıyla aynı şekilde çalışır.
Remarks
Lax modu ve katı mod
Aşağıdaki JSON metnini göz önünde bulundurun:
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"
}';
Aşağıdaki tablo, JSON_VALUE davranışını gevşek modda ve katı modda karşılaştırır. İsteğe bağlı yol modu belirtimi (lax veya strict) hakkında daha fazla bilgi için bkz. SQL Veritabanı Altyapısı'nda JSON Yol İfadeleri.
| Path | Lax modunda dönüş değeri | Katı modda değer döndürme | Daha fazla bilgi |
|---|---|---|---|
| $ | NULL |
Error | Skaler değer değil. Bunun yerine JSON_QUERY kullanın. |
| $.info.type | N'1' | N'1' | N/a |
| $.info.address.town | N'Bristol' | N'Bristol' | N/a |
| $.info." adres" | NULL |
Error | Skaler değer değil. Bunun yerine JSON_QUERY kullanın. |
| $.info.tags | NULL |
Error | Skaler değer değil. Bunun yerine JSON_QUERY kullanın. |
| $.info.type[0] | NULL |
Error | Dizi değil. |
| $.info.none | NULL |
Error | Özellik yok. |
Examples
Örnek 1
Aşağıdaki örnek, JSON özelliklerinin town değerlerini ve state sorgu sonuçlarında kullanır. Kaynağın JSON_VALUE harmanlamasını koruduğundan, sonuçların sıralama düzeni sütunun harmanlama düzenine jsonInfo bağlıdır.
Note
(Bu örnekte adlı Person.Person bir tablonun JSON metni sütunu içerdiği jsonInfo ve bu sütunun daha önce lax modu ve katı mod tartışmasında gösterilen yapıya sahip olduğu varsayılır. AdventureWorks Örnek veritabanında tablo Person aslında bir jsonInfo sütun içermiyor.)
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');
Örnek 2
Aşağıdaki örnek, JSON özelliğinin town değerini yerel bir değişkene ayıklar.
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
Örnek 3
Aşağıdaki örnek, JSON özelliklerinin değerlerine göre hesaplanan sütunlar oluşturur.
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')
);
Örnek 4
Aşağıdaki örnek kullanarak JSON_VALUE JSON dizisinden bir değer ayıklar ve değeri tarih türü değeri olarak döndürür.
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
İlgili içerik
- SQL Veritabanı Altyapısında JSON Yol İfadeleri
- SQL Server içindeki JSON verileri