表结构
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

解决方案 »

  1.   

    while @i<1000
     begin 
    --此处增加下面两句
    select @b=''
    select @j=0
      

  2.   

    --或者移动下面的两句到上述位置.
    set @b=''
    set @j=0
      

  3.   

    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
    Go