微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于json输入的动态存储过程

如何解决基于json输入的动态存储过程

我想根据输入 JSON 对象的结构编写一个动态存储过程。

{
  "store": {
    "storeId": 123,"name": "TEST","location":{                     //This is optional
      "address1": "Some Address","address2": "Some Address"
     }
  }
}

数据库中,我有两个表 STORELOCATION。 在编写存储过程时,我想验证位置键是否存在,例如

IF EXISTS (SELECT JSON_VALUE(@store,'$.store.location'))
BEGIN
Select * from LOCATION where STORE_ID = JSON_VALUE(@store,'$.store.storeId')
END

但是这个 IF 条件总是返回 true。即使“位置”键不存在。如何实施?

解决方法

当子查询至少返回一行时,

IF EXISTS 返回 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。