Dela via


JSON_CONTAINS (Transact-SQL)

Gäller för: Förhandsversion av SQL Server 2025 (17.x)

Söker efter ett SQL-värde i en sökväg i ett JSON-dokument.

Anmärkning

Funktionen JSON_CONTAINS är för närvarande i förhandsversion och är endast tillgänglig i SQL Server 2025 (17.x) Preview.

Transact-SQL syntaxkonventioner

Syntax

JSON_CONTAINS( target_expression , search_value_expression [ , path_expression ] )

Argumentpunkter

target_expression

Ett uttryck som returnerar ett JSON-måldokument för sökning. Värdet kan vara en json-typ eller ett teckensträngsvärde som innehåller ett JSON-dokument.

search_value_expression

Ett uttryck som returnerar ett SQL-skalärt värde eller json-typvärde för att söka i det angivna SQL/JSON-dokumentet.

sökväg

En SQL/JSON-sökväg som anger sökmålet i JSON-dokumentet. Den här parametern är valfri.

Du kan ange en variabel som värdet för sökvägen. JSON-sökvägen kan ange släpphänt eller strikt läge för parsning. Om du inte anger parsningsläget är läget lax standard. Mer information finns i JSON Path Expressions (SQL Server).

Standardvärdet för sökväg är $. Om du inte anger något värde för sökvägenJSON_CONTAINS söker du därför efter värdet i hela JSON-dokumentet.

Om formatet för sökväg inte är giltigt returnerar JSON_CONTAINS ett fel.

Returvärde

Returnerar ett int-värde för 0, 1eller NULL. 1 Värdet anger att det angivna sökvärdet fanns i JSON-måldokumentet eller 0 på annat sätt. Funktionen JSON_CONTAINS returnerar NULL om något av argumenten är NULL, eller om den angivna SQL/JSON-sökvägen inte hittas i JSON-dokumentet.

Anmärkningar

Funktionen JSON_CONTAINS följer dessa regler för att söka efter om ett värde finns i ett JSON-dokument:

  • Ett skalärt sökvärde finns i en målskalar om och endast om de är jämförbara och är lika. Eftersom json-typer endast har JSON-nummer eller sträng eller sant/falskt-värde begränsas de möjliga SQL-skalära typerna som kan anges som sökvärde till sql-numeriska typer, teckensträngstyper och bittyp .

  • SQL-typen för det skalära sökvärdet används för att utföra jämförelsen med json-typvärdet i den angivna sökvägen. Detta skiljer sig från JSON_VALUE-baserat predikat där JSON_VALUE funktionen alltid returnerar ett teckensträngsvärde.

  • Ett JSON-matrissökvärde finns i en målmatris om och endast om varje element i sökmatrisen finns i något element i målmatrisen.

  • Ett skalärt sökvärde finns i en målmatris om och endast om sökvärdet finns i något element i målmatrisen.

  • Ett JSON-objektsökningsvärde finns i ett målobjekt om och endast om varje nyckel/värde i sökobjektet hittas i målobjektet.

Begränsningar

JSON_CONTAINS Funktionen har följande begränsningar:

  • Json-typen stöds inte som sökvärde.
  • JSON-objektet eller matrisen som returneras från JSON_QUERY stöds inte som sökvärde.
  • Sökvägsparametern krävs för närvarande.
  • Om SQL/JSON-sökvägen pekar på en matris krävs jokertecken i sökvägsuttrycket SQL/JSON. Automatisk uppradning av matris sker för närvarande endast på den första nivån.

Stöd för JSON-index innehåller predikatet JSON_CONTAINS och följande operatorer:

  • Jämförelseoperatorer (=)
  • IS [NOT] NULL predikat (stöds inte för närvarande)

Exempel

A. Sök efter ett SQL-heltalsvärde i en JSON-sökväg

I följande exempel visas hur du söker efter ett SQL-int-värde i en JSON-matris i en JSON-sökväg.

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;

Här är resultatet.

is_value_found
--------
1

B. Sök efter ett SQL-teckensträngsvärde i en JSON-sökväg

I följande exempel visas hur du söker efter ett SQL-teckensträngsvärde i en JSON-matris i en JSON-sökväg.

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;

Här är resultatet.

is_value_found
--------
1

C. Sök efter ett SQL-bitvärde i en JSON-matris i en JSON-sökväg

I följande exempel visas hur du söker efter ett SQL-bitvärde i en JSON-matris i en JSON-sökväg.

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;

Här är resultatet.

is_value_found
--------
1

D. Sök efter ett SQL-heltalsvärde som finns i en kapslad JSON-matris

I följande exempel visas hur du söker efter ett SQL-int-värde som finns i en kapslad JSON-matris i en JSON-sökväg.

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;

Här är resultatet.

is_value_found
--------
1

E. Sök efter ett SQL-heltalsvärde som finns i ett JSON-objekt i en JSON-matris

I följande exempel visas hur du söker efter ett SQL-int-värde som finns i ett JSON-objekt i en JSON-matris i en JSON-sökväg.

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

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

Här är resultatet.

is_value_found
--------
1