isnull函数问题

查理001 2013-02-05 11:44:41
IF OBJECT_ID('[#tb]') IS NOT NULL DROP TABLE [#tb]
GO
create table #tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into #tb values('张三' , '语文' , 74)
insert into #tb values('张三' , '数学' , 83)
insert into #tb values('张三' , '物理' , 93)
insert into #tb values('李四' , '语文' , 74)
insert into #tb values('李四' , '数学' , 84)
insert into #tb values('李四' , '物理' , 94)
GO


declare @sql varchar(8000);
select @sql = isnull(@sql + ',' , '') + 课程 from #tb group by 课程;
PRINT @sql;



select @sql = isnull(@sql + ',' , '') + 课程 from #tb group by 课程;的执行过程是什么?为什么执行之后是这种结果:数学,物理,语文。
我觉得’数学‘前边应该有个逗号啊,为什么会没有
...全文
567 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
szm341 2013-02-05
  • 打赏
  • 举报
回复
declare @sql varchar(8000); select @sql = isnull(@sql + ',' , '')+ 课程 from #tb group by 课程; 在定义变量@sql时,初始值为null,null与任何值计算结构均为null 所以isnull函数起来作用,初始值为null的@sql与','的拼接结果还是null 所以,将其转换为了空字符
查理001 2013-02-05
  • 打赏
  • 举报
回复
引用 2 楼 Haiwer 的回复:
isnull(@sql + ',' , '') 对每一行先执行@sql + ',',再执行isnull 第一行,@sql + ','=null,再执行isnull后为'',再+ 课程后为'数学',赋值给@sql 第二行,因为@sql不是null,@sql + ','<>null,添加了个逗号,再+ 课程后为'数学,语文',赋值给@sql 后面行与第二行类似 ……
懂了...
查理001 2013-02-05
  • 打赏
  • 举报
回复
引用 1 楼 sc273607742 的回复:
isnull(','+@sql, '') 逗号放前面的话,前面就多个逗号
我觉得执行的顺序是这样的: 1.@sql是null,所以@sql='' 2.@sql是'',所以@sql='',数学 3.@sql是'',数学,所以@sql='',数学,语文 依次类推,我这么想是哪里错了?
昵称被占用了 2013-02-05
  • 打赏
  • 举报
回复
isnull(@sql + ',' , '') 对每一行先执行@sql + ',',再执行isnull 第一行,@sql + ','=null,再执行isnull后为'',再+ 课程后为'数学',赋值给@sql 第二行,因为@sql不是null,@sql + ','<>null,添加了个逗号,再+ 课程后为'数学,语文',赋值给@sql 后面行与第二行类似
哥眼神纯洁不 2013-02-05
  • 打赏
  • 举报
回复
isnull(','+@sql, '') 逗号放前面的话,前面就多个逗号

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧