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 2025 (17.x) Önizlemesi
JSON belgesindeki bir yolda SQL değeri arar.
Uyarı
İşlev JSON_CONTAINS
şu anda önizleme aşamasındadır ve yalnızca SQL Server 2025 (17.x) Önizleme sürümünde kullanılabilir.
Transact-SQL söz dizimi kuralları
Sözdizimi
JSON_CONTAINS( target_expression , search_value_expression [ , path_expression ] )
Tartışmalar
target_expression
Aranacak hedef JSON belgesini döndüren ifade. Değer, JSON belgesi içeren bir json türü veya karakter dizesi değeri olabilir.
arama_değer_ifadesi
Belirtilen SQL/JSON belgesinde aramak için SQL skaler değeri veya json türü değeri döndüren ifade.
yol
JSON belgesindeki arama hedefini belirten bir SQL/JSON yolu. Bu parametre isteğe bağlıdır.
Bir değişkeni yol değeri olarak sağlayabilirsiniz. JSON yolu ayrıştırma için gevşek veya katı mod belirtebilir. Ayrıştırma modunu belirtmezseniz, lax modu varsayılandır. Daha fazla bilgi için bkz. JSON Yol İfadeleri (SQL Server).
Yol için varsayılan değer şeklindedir$
. Sonuç olarak, yol için bir değer sağlamazsanız JSON JSON_CONTAINS
belgesinin tamamında değeri arar.
Yol biçimi geçerli değilse bir JSON_CONTAINS
hata döndürür.
Dönüş değeri
Bir int değeri olarak 0
, 1
veya NULL
döndürür. değeri 1
, belirtilen arama değerinin hedef JSON belgesinde veya 0
başka bir şekilde bulunduğunu gösterir. İşlev, JSON_CONTAINS
bağımsız değişkenlerinden herhangi biri NULL
ise veya belirtilen SQL/JSON yolu JSON belgesinde bulunamazsa, NULL
değerini döndürür.
Açıklamalar
İşlev, JSON_CONTAINS
JSON belgesinde bir değer olup olmadığını aramak için şu kuralları izler:
Skaler arama değeri, yalnızca karşılaştırılabilirse ve eşitse hedef skaler içinde yer alır. JSON türlerinin yalnızca JSON numarası veya dizesi veya true/false değeri olduğundan, arama değeri olarak belirtilebilen olası SQL skaler türleri SQL sayısal türleri, karakter dizesi türleri ve bit türüyle sınırlıdır.
Skaler arama değerinin SQL türü, belirtilen yolda json türü değeriyle karşılaştırma yapmak için kullanılır. Bu,
JSON_VALUE
işlevinin her zaman bir karakter dizesi değeri döndürdüğüJSON_VALUE
tabanlı koşuldan farklıdır.Bir JSON dizisi arama değeri, yalnızca arama dizisindeki her öğe hedef dizinin bir öğesinde yer alırsa hedef dizide yer alır.
Bir skaler arama değeri, yalnızca arama değeri hedef dizinin bir öğesinde yer alıyorsa hedef dizide bulunur.
Bir JSON nesnesi arama değeri, yalnızca arama nesnesindeki her anahtar/değer hedef nesnede bulunursa hedef nesnede yer alır.
Sınırlamalar
işlevinin JSON_CONTAINS
kullanılması aşağıdaki sınırlamalara sahiptir:
- Json türü arama değeri olarak desteklenmez.
- öğesinden
JSON_QUERY
döndürülen JSON nesnesi veya dizisi arama değeri olarak desteklenmez. - Path parametresi şu anda gereklidir.
- SQL/JSON yolu bir diziyi işaret ederse, SQL/JSON yol ifadesinde joker karakter gerekir. Otomatik dizi eşlemesi şu anda yalnızca ilk düzeydedir.
JSON dizin desteği koşulunu JSON_CONTAINS
ve aşağıdaki işleçleri içerir:
- Karşılaştırma işleçleri (
=
) -
IS [NOT] NULL
koşul (şu anda desteklenmiyor)
Örnekler
A. SQL tamsayı değerini bir JSON yolunda arama
Aşağıdaki örnekte, JSON yolundaki bir JSON dizisinde SQL int değerinin nasıl aranacakları gösterilmektedir.
DECLARE @j AS JSON = '{"a": 1, "b": 2, "c": {"d": 4, "ce":["dd"]}, "d": [1, 3, {"df": [89]}, false], "e":null, "f":true}';
SELECT json_contains(@j, 1, '$.a') AS is_value_found;
Sonuç kümesi aşağıdadır.
is_value_found
--------
1
B. JSON yolunda bir SQL karakter dizesi değeri arama
Aşağıdaki örnekte, JSON yolundaki bir JSON dizisinde SQL karakter dizesi değerinin nasıl arandığı gösterilmektedir.
DECLARE @j AS JSON = '{"a": 1, "b": 2, "c": {"d": 4, "ce":["dd"]}, "d": [1, 3, {"df": [89]}, false], "e":null, "f":true}';
SELECT json_contains(@j, 'dd', '$.c.ce[*]') AS is_value_found;
Sonuç kümesi aşağıdadır.
is_value_found
--------
1
C. JSON yolundaki bir JSON dizisinde SQL bit değeri arama
Aşağıdaki örnekte, JSON yolundaki bir JSON dizisinde sql bit değerinin nasıl aranacak olduğu gösterilmektedir.
DECLARE @j AS JSON = '{"a": 1, "b": 2, "c": {"d": 4, "ce":["dd"]}, "d": [1, 3, {"df": [89]}, false], "e":null, "f":true}';
SELECT json_contains(@j, CAST (0 AS BIT), '$.d[*]') AS is_value_found;
Sonuç kümesi aşağıdadır.
is_value_found
--------
1
D. İç içe JSON dizisinin içinde yer alan sql tamsayı değerini arama
Aşağıdaki örnekte, bir JSON yolunda iç içe JSON dizisi içinde yer alan bir SQL int değerinin nasıl aranacakları gösterilmektedir.
DECLARE @j AS JSON = '{"a": 1, "b": 2, "c": {"d": 4, "ce":["dd"]}, "d": [1, 3, {"df": [89]}, false], "e":null, "f":true}';
SELECT json_contains(@j, 89, '$.d[*].df[*]') AS is_value_found;
Sonuç kümesi aşağıdadır.
is_value_found
--------
1
E. JSON dizisindeki bir JSON nesnesinin içinde yer alan SQL tamsayı değerini arama
Aşağıdaki örnekte, JSON yolundaki bir JSON dizisindeki JSON nesnesi içinde yer alan bir SQL int değerinin nasıl aranacakları gösterilmektedir.
DECLARE @j AS JSON = '[{"a": 1}, {"b": 2}, {"c": 3}, {"a": 56}]';
SELECT json_contains(@j, 56, '$[*].a') AS is_value_found;
Sonuç kümesi aşağıdadır.
is_value_found
--------
1
İlgili içerik
- JSON Yol İfadeleri (SQL Server)
- SQL Server içindeki JSON verileri