首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程默认参数有关问题

2012-02-24 
存储过程默认参数问题创建一个存储过程,实现获取指定学号的所有课程成绩,输出为:学号、姓名、课程名、成绩,如

存储过程默认参数问题
创建一个存储过程,实现获取指定学号的所有课程成绩,输出为:学号、姓名、课程名、成绩,如果不指定学号,则输出所有学生的上述几个字段信息。

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 

热点排行