create proc addStudent(@stuNo varchar(20), 
@stuName varchar(50)=null, 
@stuAge int=0, 
@stuSex varchar(1)=null, 
@stuTel varchar(20)=null, 
@className varchar(20)=null, 
@stuDorm varchar(50)=null, 
@stuGrade varchar(20)=null) 
as 
declare @sql varchar(200) 
select @sql='insert into mystudent 
values('''+@stuNo+''', 
 '''+isnull(@stuName,'null')+''',
'+cast(@stuAge as varchar(10))+', 
 '''+isnull(@stuSex,'null')+''', 
 '''+isnull(@stuTel,'null')+''', 
 '''+isnull(classNo,'null')+''',
 '''+isnull(@stuDorm,'null')+''', 
 '''+isnull(@stuGrade,'null')+''')' 
from myclass 
where className=@className
exec(@sql) @className是条件,按你这写法不能为空的吧?

解决方案 »

  1.   

    我的意思是如果className为空也就是找不到记录classNo,那么
    插入表中的值也为空哦,呵呵,不知道行不行呢
      

  2.   

    create proc addStudent(@stuNo varchar(20),@stuName varchar(50)=null,@stuAge int=0, 
                @stuSex varchar(1)=null, @stuTel varchar(20)=null, @className varchar(20)=null, 
                @stuDorm varchar(50)=null, @stuGrade varchar(20)=null) 
    as 
     declare @sql varchar(200)  insert into mystudent 
     values(@stuNo,isnull(@stuName,'null'),cast(@stuAge as varchar(10)), 
            isnull(@stuSex,'null'),isnull(@stuTel,'null'),isnull(classNo,'null'), 
            isnull(@stuDorm,'null'),isnull(@stuGrade,'null')
     from myclass 
     where @className=className  if @@rowcount=0
      insert into mystudent 
      values(@stuNo,isnull(@stuName,'null'),cast(@stuAge as varchar(10)), 
             isnull(@stuSex,'null'),isnull(@stuTel,'null'),'null', 
             isnull(@stuDorm,'null'),isnull(@stuGrade,'null')
      

  3.   

    加个if判断
    create proc addStudent(@stuNo varchar(20), 
    @stuName varchar(50)=null, 
    @stuAge int=0, 
    @stuSex varchar(1)=null, 
    @stuTel varchar(20)=null, 
    @className varchar(20)=null, 
    @stuDorm varchar(50)=null, 
    @stuGrade varchar(20)=null) 
    as 
    declare @sql varchar(200) 
    if @className is null
    set @sql='insert into mystudent 
    values('''+@stuNo+''', 
     '''+isnull(@stuName,'null')+''', 
       '+cast(@stuAge as varchar(10))+', 
     '''+isnull(@stuSex,'null')+''', 
     '''+isnull(@stuTel,'null')+''', 
     ''null'',
     '''+isnull(@stuDorm,'null')+''', 
     '''+isnull(@stuGrade,'null')+''')'else
    select @sql='insert into mystudent 
    values('''+@stuNo+''', 
     '''+isnull(@stuName,'null')+''', 
       '+cast(@stuAge as varchar(10))+', 
     '''+isnull(@stuSex,'null')+''', 
     '''+isnull(@stuTel,'null')+''', 
     '''+isnull(classNo,'null')+''',-----问题出在这里, 
     '''+isnull(@stuDorm,'null')+''', 
     '''+isnull(@stuGrade,'null')+''') 

    from myclass 
    where @className=className exec(@sql) 
      

  4.   

    classNo--非字符型要加上 rtrim 转换或用convert/cast
      

  5.   

    create proc addStudent(@stuNo varchar(20), 
    @stuName varchar(50)=null, 
    @stuAge int=0, 
    @stuSex varchar(1)=null, 
    @stuTel varchar(20)=null, 
    @className varchar(20)=null, 
    @stuDorm varchar(50)=null, 
    @stuGrade varchar(20)=null) 
    as 
    declare @sql varchar(200) 
    select @sql='insert into mystudent 
    values('''+@stuNo+''', 
     '''+isnull(@stuName,'null')+''', 
       '+cast(@stuAge as varchar(10))+', 
     '''+isnull(@stuSex,'null')+''', 
     '''+isnull(@stuTel,'null')+''', 
     '''+'isnull(classNo,''null'')'+''',-----问题出在这里, 
     '''+isnull(@stuDorm,'null')+''', 
     '''+isnull(@stuGrade,'null')+''') 

    from myclass 
    where @className=className 
    exec(@sql) 
      

  6.   

     pt1314917 
    @className是条件,按你这写法不能为空的吧?
    ----------------------------
    估计为空结果就郁闷了
      

  7.   

    不好意思,我的classNo是不在mystudent表中的,呵呵,所以你的不行....
      

  8.   


    这种方法是不行的,因为claaNo在myclass表中,而其他的是在mystudent表中...的
      

  9.   

    传入的参数中没有ClassNO,是否写错了?应为ClassName.
      

  10.   

    代码没看清,Where子句是否应该颠倒一下:where className=@className