【发布时间】:2021-03-31 10:02:02
【问题描述】:
我想根据输入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 条件总是返回 true。即使“位置”键不存在。如何实现?
【问题讨论】:
-
"如果位置是关键是否存在" 嗯? is key is present 是什么意思?
-
至于
EXISTS为什么总是返回TRUE,那是因为EXISTS检查是否返回任何行,而不是返回的值是否为NULL。标量函数将总是返回一个值,因为NULL仍然是一个值;只是一个未知的。你想要IF JSON_VALUE(@store, '$.store.location') IS NOT NULL。
标签: sql-server sql-server-2017