哪位大哥帮忙看下我这个存储过程哪有问题
我想写一个存储过程随机生成6位的字符串,用来做登陆名。
alter proc Send_comp
@comid varchar(6) output
as
declare @newid varchar(36)
WHILE (0=0)
BEGIN
set @newid=newid()
set @comid=substring(@newid,1,6)
--看comp表中是否已经存在该登陆名,如果存在,继续循环;不存在。则跳出循环,最后返回这个随机字符串
IF(select count(*) from comp where comid=@comid)> 0
BREAK
ELSE
CONTINUE
END
return @comid
go
可执行这个存储过程起来动都不动,难道里面有死循环?
------解决方案--------------------把CONTINUE和BREAK调换一下位置,否则可能导致死循环.
------解决方案--------------------IF(select count(*) from comp where comid=@comid)> 0
BREAK
ELSE
CONTINUE
这个判断错了,改为:
IF(select count(*) from comp where comid=@comid)=0
BREAK
或者
IF not exists(select * from comp where comid=@comid)
BREAK
我推荐
IF not exists(select * from comp where comid=@comid)
BREAK
另外:不需要return 语句
------解决方案--------------------alter proc Send_comp
@comid varchar(6) output
as
declare @newid varchar(36)
WHILE (0=0)
BEGIN
set @newid=newid()
set @comid=substring(@newid,1,6)
--看comp表中是否已经存在该登陆名,如果存在,继续循环;不存在。则跳出循环,最后返回这个随机字符串
IF exists(select 1 from comp where comid=@comid)
CONTINUE
ELSE
BREAK
END
--return @comid /*必须删除此行,因为return只能返回整数*/
go
------解决方案--------------------打你PP,break和continue都用反了.