如表 table1
  emp_id emp_name emp_num
  s001    小张       NULL
  s002    小王       NULL
  s003    小李       NULL
  s004    小刘       NULL
   .       .         .
   .       .         .
   .       .         .
现要将table1表中的emp_num字段值改为1800到2200之间的随机数,SQL语句实现不了的话delphi程序代码也成,高手请帮帮忙,谢谢了~!

解决方案 »

  1.   

    如果你用的数据库是MS SQL Server 2000的话可以这样/*
    表结构:
    CREATE TABLE [TABLE1] (
    [emp_id] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [emp_name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [emp_num] [char] (10) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO输入数据:
    INSERT INTO [table1] ([emp_id],[emp_name],[emp_num]) values ('s001      ','小张      ','1976      ')
    INSERT INTO [table1] ([emp_id],[emp_name],[emp_num]) values ('s002      ','小王      ','1948      ')
    INSERT INTO [table1] ([emp_id],[emp_name],[emp_num]) values ('s003      ','小李      ','1993      ')
    INSERT INTO [table1] ([emp_id],[emp_name],[emp_num]) values ('s004      ','小刘      ','1971      ')*/DECLARE c CURSOR
       FOR SELECT emp_id FROM table1
    OPEN cDECLARE @emp_id char(10) FETCH NEXT FROM c INTO @emp_id
    update TABLE1 set emp_num =cast(round(RAND ()*10000,0) as int)%400+1799 where emp_id=@emp_id
    WHILE @@FETCH_STATUS = 0
    BEGINFETCH NEXT FROM c INTO @emp_idupdate TABLE1 set emp_num =cast(round(RAND ()*10000,0) as int)%400+1799 where emp_id=@emp_idENDCLOSE c
    DEALLOCATE cselect * from table1/*
    s001       小张       1976      
    s002       小王       1948      
    s003       小李       1993      
    s004       小刘       1971
    */
      

  2.   

    楼上取得的结果并不在1800-2200之间,而是在1799-2198之间,修改如下,才能获得正确的结果:DECLARE #c CURSOR FOR SELECT emp_id FROM table1
    OPEN #c
    DECLARE @emp_id char(10)
    FETCH NEXT FROM #c INTO @emp_id
    WHILE @@FETCH_STATUS=0 
    BEGIN
    UPDATE TABLE1 SET emp_num=CAST(ROUND(RAND()*1000,0)AS INT) %401+1800 
    WHERE CURRENT OF #c
    FETCH NEXT FROM #c INTO @emp_id
    END
    CLOSE #c
    DEALLOCATE #c