存储过程默认参数问题
创建一个存储过程,实现获取指定学号的所有课程成绩,输出为:学号、姓名、课程名、成绩,如果不指定学号,则输出所有学生的上述几个字段信息。
- SQL code
create procedure query(@xh char(6)=xh)asif not exists(select * from xsb where xh=@xh)print '学号不存在'elsebeginselect * from(select xsb.xh,xm,kcm,cj from xsb join cjb join kcbon cjb.kch=kcb.kchon xsb.xh=pcjb.xh)as temp(xh,xm,kcm,cj) where xh=@xhendexecute query '081102'
xsb表字段:xh char(6),xm char(8),xb bit,cssj datetime
kcb表字段:kch char(3),kcm char(20)
cjb表字段:xh char(6),kch char(3),cj int
问题:当不输入参数时,居然输出了"学号不存在"的提示,于是我猜想可能是@xh为null,于是更成判断@xh是否为null,可是结果显示表明在不带参数时@xh不是null啊!这个让我很困惑啊!各位大仙帮帮我啊!
[解决办法]
- SQL code
--默认*为全部create procedure query(@xh char(6) = '*')asif isnull(@xh,'*') = '*'begin select xsb.xh,xsb.xm,kcb.kcm,cjb.cj from xsb,cjb,kcb where cjb.kch = kcb.kch and xsb.xh = cjb.xhendelsebegin select xsb.xh,xsb.xm,kcb.kcm,cjb.cj from xsb,cjb,kcb where cjb.kch = kcb.kch and xsb.xh = cjb.xh and xsb.xh = @xhend