首页 新闻 会员 周边

sqlserver 存储过程 将同一个字段的所有值拼接为一个,若该字段中的值包含null跳过,不进行拼接

0
悬赏园豆:30 [已解决问题] 解决于 2019-11-27 16:03

sqlserver 存储过程  将同一个字段的所有值拼接为一个,若该字段中的值包含null跳过,不进行拼接,该如何实现呢,主要就是我不会跳过null,用逗号拼接同一个字段下的多个值我已经实现了。。。。。

夕阳下的你我的主页 夕阳下的你我 | 初学一级 | 园豆:4
提问于:2019-11-27 14:48
< >
分享
最佳答案
1

楼主如果是使用dapper的话 可以直接使用下面的方式进行操作和调用存储过程
var result = conn.QueryMultiple("存储过程名称", new
{
A= a
B =b,
C = c,
D =d,
E =e
}, null, null, CommandType.StoredProcedure);
dapper底层会自动将你的字段映射上去的

收获园豆:28
初夏的阳光丶 | 小虾三级 |园豆:641 | 2019-11-27 15:05

唉,现在用的是SQLserver,难受啊,谢谢啦

夕阳下的你我 | 园豆:4 (初学一级) | 2019-11-27 15:07

@夕阳下的你我:
在sqlserver中 有使用过下面两种吗
select * from table where (addDate = @addDate or @addDate is null) and (name = @name or @name = '')

SELECT * FROM table where
addDate = CASE @addDate IS NULL THEN addDate ELSE @addDate END,
name = CASE @name WHEN '' THEN name ELSE @name END

初夏的阳光丶 | 园豆:641 (小虾三级) | 2019-11-27 15:10

@初夏的阳光丶: SQLserver我刚学没多久,好多我都是一知半解,我试过,不过

 

 select stuff((select ','+sCottonLevel from dbo.OrderMaterial where sMaterialCode='C02-01'  and sCottonLevel is not null  for xml path('')),1,1,'')    这个和

 select stuff((select ','+sCottonLevel from dbo.OrderMaterial where sMaterialCode='C02-01'  and   for xml path('')),1,1,'') 怎么效果没什么区别啊

 

sCottonLevel is not null   这个难道我用的不对吗???

夕阳下的你我 | 园豆:4 (初学一级) | 2019-11-27 15:18

@夕阳下的你我: select stuff 是删除指定长度的字符并在指定的起始点插入另一组字符,你在这里用个人感觉不太合适

初夏的阳光丶 | 园豆:641 (小虾三级) | 2019-11-27 15:21

@初夏的阳光丶: 我现在就是想将同一个字段的所有值拼接成为一个(比如一个学生表里面,字段有学号,姓名,班级等,现有两个学生,他们的班级都是1班,一个学号是123,另一个学号是456,我现在的目的就是: 查班级为1的学生,并把他们的学号用逗号拼接并获取,我要的结果是123,456),但是如果有第三个学生,学号是null的,但是班级也是1,不也不想拼接null,我想跳过他,我不会了。。。。

夕阳下的你我 | 园豆:4 (初学一级) | 2019-11-27 15:31

@夕阳下的你我: 这个是原始数据
这个是sql :select (
select ISNULL(CAST(UserName as varchar )+',', '') from test for xml path('') ) as a

最后是结果

不知道你要的结果是不是这样的

初夏的阳光丶 | 园豆:641 (小虾三级) | 2019-11-27 15:46

@初夏的阳光丶: 没错,局ishi你那有那样,但是最后面那个逗号最好可以去掉

夕阳下的你我 | 园豆:4 (初学一级) | 2019-11-27 15:57

@夕阳下的你我: select left((
select ISNULL(CAST(UserName as varchar )+',', '') from test for xml path('') ),len(
(
select ISNULL(CAST(UserName as varchar )+',', '') from test for xml path(''))
)-1) as a
直接使用内置函数 left 就可以去掉 这个的结果应该就是你说的那种啦,

初夏的阳光丶 | 园豆:641 (小虾三级) | 2019-11-27 16:03

@初夏的阳光丶: 强,厉害

夕阳下的你我 | 园豆:4 (初学一级) | 2019-11-27 16:08
其他回答(2)
0

 循环判断这个字段是否为空,不为空拼接,为空就继续

收获园豆:2
华临天下 | 园豆:1501 (小虾三级) | 2019-11-27 15:41
0

如果是高版本的用contains连接

萧十二郎 | 园豆:202 (菜鸟二级) | 2021-06-09 14:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册