请教,我的sql循环套循环出了问题,请大侠帮个忙。
表结构
TABLE [AllUser] (
[UserID] [int] IDENTITY (1000000, 1) NOT NULL ,
[LoginName] [varchar] (32) NOT NULL,
[Password] [varchar] (16) NOT NULL,
[FaceID] [smallint] NOT NULL,
[RegisterTime] [smalldatetime] NOT NULL ,
)
ALTER TABLE [dbo].[AllUser] ADD
CONSTRAINT [DF_AllUser_FaceID] DEFAULT (0) FOR [FaceID],
CONSTRAINT [DF_AllUser_LoginTime] DEFAULT (getdate()) FOR [RegisterTime],0
CONSTRAINT [CK_AllUser_FaceID] CHECK ([FaceID] >= 0 and [FaceID] <= 241)
GO
各位大侠,我在这里添加1000个用户到数据库,但是1000个用户的密码却是同一个,循环堪套出了问题,请大侠指点。
代码
declare @i int
declare @j int
declare @a varchar
declare @b varchar(8)
set @a=''
set @b=''
set @j=0
set @i=0
while @i<1000
begin
while @j<8
begin
set @a=convert(varchar,char((126-32)*rand()+32))
set @b=@b+@a
set @j=@j+1
end
set @i=@i+1
if @i<=9
Insert into alluser(loginname,password,faceid,registertime)
Values('用户'+'000'+CONVERT(varchar,@i),@b,241*rand(),getdate())
else if @i<=99
Insert into alluser(loginname,password,faceid,registertime)
Values('用户'+'00'+CONVERT(varchar,@i),@b,241*rand(),getdate())
else if @i<=999
Insert into alluser(loginname,password,faceid,registertime)
Values('用户'+'0'+CONVERT(varchar,@i),@b,241*rand(),getdate())
else if @i=1000
Insert into alluser(loginname,password,faceid,registertime)
Values('用户'+CONVERT(varchar,@i),@b,241*rand(),getdate())
end
Go
问题点数:50、回复次数:7Top
1 楼rivery(river)回复于 2006-03-15 11:43:37 得分 10
while @i<1000
begin
--此处增加下面两句
select @b=''
select @j=0Top
2 楼lsqkeke(可可)回复于 2006-03-15 11:44:19 得分 5
我分开测 没发现问题Top
3 楼rivery(river)回复于 2006-03-15 11:44:42 得分 10
--或者移动下面的两句到上述位置.
set @b=''
set @j=0
Top
4 楼lsqkeke(可可)回复于 2006-03-15 11:45:30 得分 3
一楼说得对 :)
没重值值Top
5 楼rivery(river)回复于 2006-03-15 11:46:11 得分 2
由于第一次执行后,@j的值没有复位,所以后边就不执行里面的循环了.Top
6 楼scmail81(琳·风の狼(修罗))回复于 2006-03-15 11:46:41 得分 20
create TABLE [AllUser] (
[UserID] [int] IDENTITY (1000000, 1) NOT NULL ,
[LoginName] [varchar] (32) NOT NULL,
[Password] [varchar] (16) NOT NULL,
[FaceID] [smallint] NOT NULL,
[RegisterTime] [smalldatetime] NOT NULL ,
)
ALTER TABLE [dbo].[AllUser] ADD
CONSTRAINT [DF_AllUser_FaceID] DEFAULT (0) FOR [FaceID],
CONSTRAINT [DF_AllUser_LoginTime] DEFAULT (getdate()) FOR [RegisterTime],
CONSTRAINT [CK_AllUser_FaceID] CHECK ([FaceID] >= 0 and [FaceID] <= 241)
GO
declare @i int
declare @j int
declare @a varchar(1)
declare @b varchar(8)
set @a=''
set @b=''
set @j=0
set @i=0
while @i<1000
begin
while @j<8
begin
set @a=convert(varchar,char((126-32)*rand()+32))
set @b=@b+@a
set @j=@j+1
end
set @i=@i+1
if @i<=9
Insert into alluser(loginname,password,faceid,registertime)
Values('用户'+'000'+CONVERT(varchar,@i),@b,241*rand(),getdate())
else if @i<=99
Insert into alluser(loginname,password,faceid,registertime)
Values('用户'+'00'+CONVERT(varchar,@i),@b,241*rand(),getdate())
else if @i<=999
Insert into alluser(loginname,password,faceid,registertime)
Values('用户'+'0'+CONVERT(varchar,@i),@b,241*rand(),getdate())
else if @i=1000
Insert into alluser(loginname,password,faceid,registertime)
Values('用户'+CONVERT(varchar,@i),@b,241*rand(),getdate())
set @a=''
set @b=''
set @j=0
end
GoTop
7 楼jacky_lei()回复于 2006-03-15 12:11:28 得分 0
谢谢各位大侠
原来我忘了晴空啊
谢谢Top




