SqlServer Case When遇到无法变成json对象的问题

问题描述

在工作的时候碰到一个需求,是一个仓库管理系统的出入库调整单的查询。
显示的时候有一个主单,同时需要查询详单数据,但是主单既可以和出库单关联,也可以和入库单关联,所以在查询的时候就需要判断详单类型,从而查询不同的数据库表。

解决思路

按条件查询我第一时间就想到了使用 Case When来判断,定义一个变量来作为判断条件,根据不同的值来执行不同的When就可以,但是最后缺遇到了一个问题。

问题出现

在使用Case When的时候,我们接口需要返回Json对象,使FOR JSON PATRH 将返回的数据变成json对象,但是测试的时候,却发现When里面的查询结果虽然生成了json数据,但是却没有变成json对象,而是json对象转译成了字符串,这样我们没有办法处理数据,就很麻烦。

问题解决

在和同事的讨论下,发现可以不使用Case When来进行判断,这里我们使用的是Union联合查询,我们将出入库两种情况进行联合查询,然后将判断条件作为Where的条件,这样联合查询只会执行其中一个,同时也可以生成json对象了。完美的解决问题。

问题总结

这可能是SQLserver中一个小坑,因为数据库默认Case When 中都是字符串,但是又可以进行查询,所以查询出来的结果都是字符串,无论怎么操作,最后生成的一定是字符串。同时我在处理这个问题的时候也钻了牛角尖,一直在思考如何解决变成字符串的这个问题,没有跳出Case When思考其他的判断方式,所以遇到问题一定要多思考几种解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值