From SQL Server 2022 we can use the JSON_PATH_EXISTS()
function to test whether a specified SQL/JSON path exists in the input JSON string.
It’s similar to the JSON_CONTAINS_PATH()
function that’s available in MySQL and MariaDB.
Syntax
The syntax goes like this:
JSON_PATH_EXISTS( value_expression, sql_json_path )
Where value_expression
is a character expression, and sql_json_path
is the SQL/JSON path to test in the input.
Example
Here’s an example to demonstrate:
DECLARE @json_document nvarchar(max);
SET @json_document=N'{ "name": "Wag", "weight": 10 }';
SELECT JSON_PATH_EXISTS(@json_document, '$.name');
Result:
1
In this case the path exists and so 1
is returned.
Here’s what happens when the path doesn’t exist:
DECLARE @json_document nvarchar(max);
SET @json_document=N'{ "name": "Wag", "weight": 10 }';
SELECT JSON_PATH_EXISTS(@json_document, '$.height');
Result:
0
We get zero because the path doesn’t exist.
Passing a NULL Input Expression
Passing a NULL input expression results in NULL
being returned:
JSON_PATH_EXISTS(null, '$.height');
Result:
NULL
Passing the Wrong Number of Arguments
Passing the wrong number of arguments results in an error:
JSON_PATH_EXISTS('$.height');
Result:
Msg 174, Level 15, State 1, Server d6c3fe112f7a, Line 5 The json_path_exists function requires 2 argument(s).
In this case I only passed one argument when I should have passed two. The same error occurs when we pass three or more arguments.