日期:2014-05-18  浏览次数:20325 次

存储过程中传入参数问题 求高手解答
数据表:学号,姓名,班级
我用存储过程实现自动编号 存储过程如下
ALTER proc pro_学生编号 @学生学号 varchar(20) 
output AS BEGIN DECLARE @TempString varchar(20) SELECT @TempString = Max(学生学号)
  FROM InfoId 
IF (@TempString IS NULL)
  SET @TempString = 'Xs2008010201' 
  ELSE
  SET @TempString = 'xs' + cast(cast(substring(@TempString, 3, 10) AS int)+ 1 AS varchar(20))
SET @学生学号 = @TempString END
  但是这样的号如果班级不同 学号会乱掉 比如08级的Xs2008010221,然后我在输入09级的,按这个存储过程就是Xs2008010222,能不能在winform里取得参数放到这个存储过程里,还有里面的Xs能不能也从winform里面获得。
在线等 谢谢各位大侠了。。。。

------解决方案--------------------
可以,作为存储过程的入口参数,赋值拼串即可!
------解决方案--------------------
存储过程多加一个参数:班级。
修改如下:
ALTER proc pro_学生编号 
@班级 varchar(20)
@学生学号 varchar(20) output 
AS 
BEGIN 
DECLARE @TempString varchar(20) 

--根据班级查询最大学生号
SELECT @TempString = Max(学生学号)
FROM InfoId 
WHERE 班级=@班级

IF (@TempString IS NULL)
SET @TempString = 'Xs'+@班级+'010201'
ELSE
SET @TempString = 'Xs' + cast(cast(substring(@TempString, 3, 10) AS int)+ 1 AS varchar(20))

SET @学生学号 = @TempString 
END

可能需要修改InfoId表,增加班级字段。