Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: VERSIÓN PRELIMINAR de SQL Server 2025 (17.x)
Busca un valor SQL en una ruta en un documento JSON.
Nota:
La JSON_CONTAINS
función está actualmente en versión preliminar y solo está disponible en la versión preliminar de SQL Server 2025 (17.x).
Convenciones de sintaxis de Transact-SQL
Sintaxis
JSON_CONTAINS( target_expression , search_value_expression [ , path_expression ] )
Argumentos
target_expression
Expresión que devuelve un documento JSON de destino que se va a buscar. El valor puede ser un tipo json o un valor de cadena de caracteres que contiene un documento JSON.
search_value_expression
Expresión que devuelve un valor escalar de SQL o un valor de tipo json para buscar en el documento SQL/JSON especificado.
ruta
Ruta de acceso SQL/JSON que especifica el destino de búsqueda en el documento JSON. Este parámetro es opcional.
Puede proporcionar una variable como valor de ruta. La ruta de acceso JSON puede especificar el modo lax o strict para el análisis. Si no se especifica el modo de análisis, el modo lax es el valor predeterminado. Para más información, vea Expresiones de ruta de acceso JSON (SQL Server).
El valor predeterminado de path es $
. Como resultado, si no proporciona un valor para la ruta de acceso, JSON_CONTAINS
busca el valor en todo el documento JSON.
Si el formato de path no es válido, JSON_CONTAINS
devuelve un error.
Valor devuelto
Devuelve un valor int de 0
, 1
o NULL
. Un valor de 1
indica que el valor de búsqueda especificado estaba incluido en el documento JSON de destino, o 0
en caso contrario. La JSON_CONTAINS
función devuelve NULL
si alguno de los argumentos es NULL
o si la ruta de acceso SQL/JSON especificada no se encuentra en el documento JSON.
Observaciones
La JSON_CONTAINS
función sigue estas reglas para buscar si un valor está contenido en un documento JSON:
Un valor de búsqueda escalar se incluye en un escalar de destino si y solo si son comparables y son iguales. Dado que los tipos json solo tienen un número JSON o un valor true/false, los posibles tipos escalares de SQL que se pueden especificar como valor de búsqueda se limitan a los tipos numéricos de SQL, los tipos de cadena de caracteres y el tipo de bits .
El tipo SQL del valor de búsqueda escalar se utiliza para comparar con el valor tipo json en la ruta especificada. Esto es diferente del predicado basado en
JSON_VALUE
, dondeJSON_VALUE
función siempre devuelve un valor de cadena de caracteres.Un valor de búsqueda de matriz JSON se incluye en una matriz de destino si y solo si cada elemento de la matriz de búsqueda está contenido en algún elemento de la matriz de destino.
Un valor de búsqueda escalar se incluye en una matriz de destino si y solo si el valor de búsqueda está contenido en algún elemento de la matriz de destino.
Un valor de búsqueda de objetos JSON se encuentra en un objeto de destino si y solo si cada clave/valor del objeto de búsqueda se encuentra en el objeto de destino.
Limitaciones
El uso de la JSON_CONTAINS
función tiene las siguientes limitaciones:
- El tipo json no se admite como valor de búsqueda.
- El objeto JSON o matriz devuelto de
JSON_QUERY
no se admite como valor de búsqueda. - El parámetro path es necesario actualmente.
- Si la ruta de acceso de SQL/JSON apunta a una matriz, se requiere un comodín en la expresión de ruta de acceso de SQL/JSON. La desencapsulación automática de matrices solo está actualmente en el primer nivel.
La compatibilidad con índices JSON incluye el JSON_CONTAINS
predicado y los operadores siguientes:
- Operadores de comparación (
=
) -
IS [NOT] NULL
predicado (no admitido actualmente)
Ejemplos
Un. Búsqueda de un valor entero de SQL en una ruta de acceso JSON
En el ejemplo siguiente se muestra cómo buscar un valor int de tipo SQL en una matriz JSON en un camino JSON.
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;
Este es el conjunto de resultados.
is_value_found
--------
1
B. Buscar un valor de cadena SQL en un trayecto JSON
Este ejemplo muestra cómo buscar un valor de cadena SQL en un array JSON dentro de una ruta JSON.
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;
Este es el conjunto de resultados.
is_value_found
--------
1
C. Búsqueda de un valor de bit SQL en un array JSON en una ruta JSON
En el ejemplo siguiente se muestra cómo buscar un valor de bit sql en una matriz JSON en una ruta JSON.
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;
Este es el conjunto de resultados.
is_value_found
--------
1
D. Búsqueda de un valor entero de SQL incluido en una matriz JSON anidada
En el ejemplo siguiente se muestra cómo buscar un valor int de SQL contenido en una matriz JSON anidada en una ruta JSON.
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;
Este es el conjunto de resultados.
is_value_found
--------
1
E. Búsqueda de un valor entero de SQL incluido en un objeto JSON en una matriz JSON
En el siguiente ejemplo se muestra cómo buscar un valor de SQL int contenido dentro de un objeto JSON en una matriz JSON en un camino JSON.
DECLARE @j AS JSON = '[{"a": 1}, {"b": 2}, {"c": 3}, {"a": 56}]';
SELECT json_contains(@j, 56, '$[*].a') AS is_value_found;
Este es el conjunto de resultados.
is_value_found
--------
1