Megosztás a következőn keresztül:


JSON_CONTAINS (Transact-SQL)

A következőkre vonatkozik: SQL Server 2025 (17.x)

Egy JSON-dokumentum elérési útjának SQL-értékét keresi.

Note

A JSON_CONTAINS funkció jelenleg előnézetben van, és csak SQL Server 2025 (17.x) verzióban érhető el.

Transact-SQL szintaxis konvenciók

Syntax

JSON_CONTAINS( target_expression , search_value_expression [ , path_expression ]  [ , search_mode ] )

Arguments

target_expression

Kifejezés, amely egy cél JSON-dokumentumot ad vissza a kereséshez. Az érték lehet JSON-típus vagy karaktersztring érték, amely JSON-dokumentumot tartalmaz.

search_value_expression

Olyan kifejezés, amely egy SQL skaláris vagy json típusú értéket ad vissza a megadott SQL/JSON-dokumentumban való kereséshez.

path

Egy SQL/JSON-elérési út, amely megadja a keresési célt a JSON-dokumentumban. Ez a paraméter nem kötelező.

Megadhat egy változót az elérési út értékeként. A JSON-elérési út megadhatja a hasadékot vagy a szigorú elemzési módot. Ha nem adja meg az elemzési módot, a lax mód az alapértelmezett. További információ: JSON Path Expressions in the SQL Database Engine.

Az elérési út alapértelmezett értéke.$ Ennek eredményeképpen, ha nem ad meg értéket az elérési úthoz, JSON_CONTAINS a teljes JSON-dokumentumban megkeresi az értéket.

Ha az elérési út formátuma érvénytelen, JSON_CONTAINS hibát ad vissza.

search_mode

Azt jelzi, hogy az érték keresési módjának egyenlőséget vagy LIKE predikátumot kell-e használnia. Ez a paraméter csak akkor érvényes, ha a search_value_expression karaktersztring-érték. A search_mode alapértelmezett értéke 0, ami egyenlőségi predikátum szemantikát jelez. Ha a search_mode 1, akkor azt jelzi, hogy a LIKE predikátum szemantikát kell használni.

Visszaadott érték

Visszatér egy int értékkel: 0, 1, vagy NULL. Az érték 1 azt jelzi, hogy a megadott keresési érték a cél JSON-dokumentumban 0 vagy más módon található. A JSON_CONTAINS függvény akkor ad vissza NULL , ha az argumentumok bármelyike, NULLvagy ha a megadott SQL/JSON-elérési út nem található a JSON-dokumentumban.

Remarks

A JSON_CONTAINS függvény az alábbi szabályokat követi a kereséshez, ha egy JSON-dokumentum tartalmaz egy értéket:

  • A skaláris keresési érték akkor és csak akkor szerepel a cél skalárban, ha összehasonlítható és egyenlő. Mivel a json-típusok csak JSON-számmal vagy sztringgel vagy igaz/hamis értékkel rendelkeznek, a keresési értékként megadható lehetséges SQL skaláris típusok az SQL-numerikus típusokra, a karaktersztringtípusokra és a bittípusra korlátozódnak.

  • A skaláris keresési érték SQL-típusa a megadott elérési út json típusú értékével való összehasonlítás végrehajtására szolgál. Ez eltér a JSON_VALUE alapú predikátumtól, ahol a JSON_VALUE függvény mindig egy karakterlánc-értéket ad vissza.

  • A JSON-tömb keresési értéke akkor és csak akkor szerepel a céltömbben, ha a keresési tömb minden eleme a céltömb valamely elemében található.

  • A skaláris keresési érték akkor és csak akkor szerepel a céltömbben, ha a keresési érték a céltömb valamely elemében található.

  • A JSON-objektum keresési értéke akkor és csak akkor szerepel a célobjektumban, ha a keresési objektum minden kulcsát/értékét a célobjektum tartalmazza.

Limitations

A függvény használata a JSON_CONTAINS következő korlátozásokkal rendelkezik:

  • A json típus nem támogatott keresési értékként.
  • A visszaadott JSON_QUERY JSON-objektum vagy tömb nem támogatott keresési értékként.
  • Az elérési út paramétere jelenleg kötelező.
  • Ha az SQL/JSON elérési út egy tömbre mutat, akkor helyettesítő karakterre van szükség az SQL/JSON elérési út kifejezésében. Az automatikus tömb kibontása jelenleg csak az első szinten történik.

A JSON-index támogatása magában foglalja a JSON_CONTAINS predikátumot és a következő operátorokat:

  • Összehasonlító operátorok (=)
  • IS [NOT] NULL predikátum (jelenleg nem támogatott)

Examples

A. SQL egész számérték keresése egy JSON-útvonalon

Az alábbi példa bemutatja, hogyan kereshet sql int értéket egy JSON-tömbben egy JSON-útvonalon.

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;

Itt van az eredmények összessége.

is_value_found
--------
1

B. SQL karakterlánc értékének keresése egy JSON-útvonalon

Az alábbi példa bemutatja, hogyan kereshet egy SQL karaktersorozatot egy JSON-tömbben egy JSON-útvonalon.

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;

Itt van az eredmények összessége.

is_value_found
--------
1

C. SQL-bitérték keresése egy JSON-tömbben egy JSON-útvonalon

Az alábbi példa bemutatja, hogyan kereshet sql bitértéket egy JSON-tömbben egy JSON-útvonalon.

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;

Itt van az eredmények összessége.

is_value_found
--------
1

D. Beágyazott JSON-tömbben található SQL-egész szám keresése

Az alábbi példa bemutatja, hogyan kereshet egy beágyazott JSON-tömbben található SQL int értéket egy JSON-elérési úton.

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;

Itt van az eredmények összessége.

is_value_found
--------
1

E. Egy JSON-tömb JSON-objektumában található SQL egész számérték keresése

Az alábbi példa bemutatja, hogyan kereshet egy JSON-objektumban található SQL-int értéket egy JSON-útvonal JSON-tömbjében.

DECLARE @j AS JSON = '[{"a": 1}, {"b": 2}, {"c": 3}, {"a": 56}]';

SELECT json_contains(@j, 56, '$[*].a') AS is_value_found;

Itt van az eredmények összessége.

is_value_found
--------
1

F. SQL-karakter sztringértékének keresése egy JSON-útvonalon helyettesítő karaktermintával

Az alábbi példa bemutatja, hogyan kereshet SQL-karakter sztringértéket egy JSON-útvonalon lévő JSON-tömb mintájának használatával.

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;

Itt van az eredmények összessége.

is_value_found
--------
1