sqlserver 存储过程 将同一个字段的所有值拼接为一个,若该字段中的值包含null跳过,不进行拼接,该如何实现呢,主要就是我不会跳过null,用逗号拼接同一个字段下的多个值我已经实现了。。。。。
楼主如果是使用dapper的话 可以直接使用下面的方式进行操作和调用存储过程
var result = conn.QueryMultiple("存储过程名称", new
{
A= a
B =b,
C = c,
D =d,
E =e
}, null, null, CommandType.StoredProcedure);
dapper底层会自动将你的字段映射上去的
唉,现在用的是SQLserver,难受啊,谢谢啦
@夕阳下的你我:
在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
@初夏的阳光丶: 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 这个难道我用的不对吗???
@夕阳下的你我: select stuff 是删除指定长度的字符并在指定的起始点插入另一组字符,你在这里用个人感觉不太合适
@初夏的阳光丶: 我现在就是想将同一个字段的所有值拼接成为一个(比如一个学生表里面,字段有学号,姓名,班级等,现有两个学生,他们的班级都是1班,一个学号是123,另一个学号是456,我现在的目的就是: 查班级为1的学生,并把他们的学号用逗号拼接并获取,我要的结果是123,456),但是如果有第三个学生,学号是null的,但是班级也是1,不也不想拼接null,我想跳过他,我不会了。。。。
@夕阳下的你我: 这个是原始数据
这个是sql :select (
select ISNULL(CAST(UserName as varchar )+',', '') from test for xml path('') ) as a
最后是结果
不知道你要的结果是不是这样的
@初夏的阳光丶: 没错,局ishi你那有那样,但是最后面那个逗号最好可以去掉
@夕阳下的你我: 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 就可以去掉 这个的结果应该就是你说的那种啦,
@初夏的阳光丶: 强,厉害
循环判断这个字段是否为空,不为空拼接,为空就继续
如果是高版本的用contains连接