存储过程中使用OPENJSON时如何实现条件取不同JSON键值
实现方法
完全可以实现这个需求,具体做法是在OPENJSON的WITH子句中同时解析shortName和longName两个字段,再通过COALESCE函数优先取shortName的值,当shortName不存在时自动 fallback 到longName。
修改后的存储过程代码如下:
CREATE PROCEDURE dbo.uspAddToTable @json NVARCHAR(MAX) AS BEGIN INSERT INTO dbo.MyTable (id, name) SELECT id, COALESCE(shortName, longName) AS name FROM OPENJSON(@json) WITH ( id integer '$.id', shortName varchar(100) '$.shortName', longName varchar(100) '$.longName' ) tbl END
说明:
COALESCE函数会返回参数列表中第一个非NULL的值,正好匹配你“优先用shortName,无则用longName”的逻辑- 当JSON对象中不存在对应键时,
OPENJSON会返回NULL,所以这个方法可以完美处理你的场景 - 你也可以用
ISNULL(shortName, longName)替代COALESCE,二者在这个场景下效果一致,但COALESCE支持更多备选值,扩展性更强
内容的提问来源于stack exchange,提问作者AnalyzingTasks
相关产品推荐
相关产品推荐

