SQL Server 处理In Nvarchar/string数据

6 篇文章 0 订阅
5 篇文章 0 订阅

这个问题,来自今天处理一个工资项显示问题,要求是员工查询工资时,假如当月全部员工都没有的薪酬项,就不显示

这个问题也跟近几个月有关,年初么,有的地方就发年终奖了,只是一个月有,或者个别月有,另外还有高温补贴,其他福利等等。就不一一列举了

了解了情况就进去正题吧

一、第一段SQL是查询出当月配置的工资项,然后用SUM进行了求和,(emmm,写到这,发现好像...万一...出现了负数,相抵扣了怎么办,写完赶紧改了,[狗头保命])

求和之后,我们就筛选掉和为0的数据,再选出需要的列。然后再到实际代码中处理 name in(@InLastItem) ,以实现上诉问题。

二、在这之中呢,发现了两个问题,其中一个就是这里要写的

1、看图

在第一个黄色边框,是一个固定排除的写法,第二个就是我要加的需求改动的地方。红色框内,就是变量参数,以及他的结果

问题就出在这,我们使用变量带入,是得不出结果的,使用变量结果是可以得出要的效果。

.......自己做的时候想了挺久,搞不变了,问大佬。

经过大佬的指点,我找到了门路。

因为变量类型为Nvarchar,他在这里执行的时候就把整体的值作为了一个Nvarchar值,而不是我们以为的“满勤奖”、“业绩奖”、“总经理奖”......这样一个一个拆分的单个Nvarchar值

(还是存在疑惑,为什么,为什么就不能变成单个执行?)

所以,在薪酬项目中,是找不到这样的值的。

总结了上边的问题,既然使用结果是可以,但是变量不行,那么,我把整个后边的SQL使用一个Nvarchar(max)变量保存,然后在最后的时候使用EXEC(@SQL) 是否就可以达到效果了呢?

经过实践,这样的拼接是有效的。

在后边的某一时刻,我又想到了我之前的文章,SQL Server 拆分字符串(函数),问题处理存在相似之处。

后边再使用了[]符号来拼接,也是行不通,至此,只有上边执行EXEC的方法可行了。(相信还是有的,但是还未寻找到)

后边再补一篇文章写 stuff 、FOR xml PATH 的使用。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值