基于 json 输入的动态存储过程
Dynamic stored procedure based upon json input
我想根据输入 JSON 对象的结构编写一个动态存储过程。
{
"store": {
"storeId": 123,
"name": "TEST",
"location":{ //This is optional
"address1": "Some Address",
"address2": "Some Address"
}
}
}
在数据库中我有两个表 STORE 和 LOCATION。
在编写存储过程时,我想验证位置键是否存在,例如
IF EXISTS (SELECT JSON_VALUE(@store, '$.store.location'))
BEGIN
Select * from LOCATION where STORE_ID = JSON_VALUE(@store, '$.store.storeId')
END
但是这个 IF 条件总是 returns 为真。即使 'location' 键不存在。如何实施?
IF EXISTS
returns TRUE
当子查询至少返回一行时。当您 运行 查询且可选值不存在时,将返回单行单列结果以及 NULL
值。因此,无论如何,IF 条件将始终为 TRUE
。
下面是一种仅在存在 location
json 对象时执行查询的方法(根据@Zhorov 的评论编辑为使用 JSON_QUERY
):
IF (SELECT JSON_QUERY(@store, '$.store.location')) IS NOT NULL
BEGIN
Select * from LOCATION where STORE_ID = JSON_VALUE(@store, '$.store.storeId')
END
我想根据输入 JSON 对象的结构编写一个动态存储过程。
{
"store": {
"storeId": 123,
"name": "TEST",
"location":{ //This is optional
"address1": "Some Address",
"address2": "Some Address"
}
}
}
在数据库中我有两个表 STORE 和 LOCATION。 在编写存储过程时,我想验证位置键是否存在,例如
IF EXISTS (SELECT JSON_VALUE(@store, '$.store.location'))
BEGIN
Select * from LOCATION where STORE_ID = JSON_VALUE(@store, '$.store.storeId')
END
但是这个 IF 条件总是 returns 为真。即使 'location' 键不存在。如何实施?
IF EXISTS
returns TRUE
当子查询至少返回一行时。当您 运行 查询且可选值不存在时,将返回单行单列结果以及 NULL
值。因此,无论如何,IF 条件将始终为 TRUE
。
下面是一种仅在存在 location
json 对象时执行查询的方法(根据@Zhorov 的评论编辑为使用 JSON_QUERY
):
IF (SELECT JSON_QUERY(@store, '$.store.location')) IS NOT NULL
BEGIN
Select * from LOCATION where STORE_ID = JSON_VALUE(@store, '$.store.storeId')
END