Aracılığıyla paylaş


JSON_VALUE (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsSQL analiz uç noktası Microsoft Fabric'teki Microsoft FabricSQL 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_VALUE bir 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.

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