先说情况:
一个名叫的User表,其中有字段
uId 主键ID
Username 用户名
RegDate 注册时间
这三个字段。里面有10万条记录。现在,我想把10万记录,从2010-1-1到今天,以天数为最大循环单位,
把10万记录条数的RegDate(注册时间) update到今天。每天递增。
意思就是说,
例如:
时间为2010-1-1 update 3条记录
时间为2010-1-2 update 5条记录
时间为2010-1-3 update 7条记录
。。
今天2011-10-18 update 2000条记录(今天刚好把剩下的update完)这是工作中遇见的情况,实在搞不掂。
特请大侠们帮我出一个脚本或存储过程,如不明白我会再说明白,先拜托各位了。

解决方案 »

  1.   

    declare @dt datetime,@dt2 datetime,@i int
    set @dt='2010-1-1'
    set @i=1
    set @dt2=convert(varchar(10),getdate(),120)
    while @dt<=dt2
    begin
    set rowcount @i
    update [user] set Username=Username where convert(varchar(10),RegDate,120)=@dt
    select @dt=@dt+1,@i=@i+2end
    set rowcount 0
      

  2.   

    不存在假日。第天都算。
    问题主要是那个递增,递增数可以固定,也可以不固定。
    递增数随便用一个的话,会出现要么N天前就update完了,要么最后一天时,还有大把记录。变成最后一天爆增,
      

  3.   

    declare @dt datetime,@dt2 datetime,@i int,@con int
    set @dt='2010-1-1'
    select @i=1,@con=0
    set @dt2=convert(varchar(10),getdate(),120)
    while @dt<=@dt2 and @con<2000
    begin
    if @dt=@dt2
    select @i=2000-@con
    set rowcount @i
    update [user] set Username=Username where convert(varchar(10),RegDate,120)=@dt
    set @con=@con+@@ROWCOUNT
    select @dt=@dt+1,@i=@i+2
    end
    set rowcount 0这里写了一个算法,如果2000条到今天还没有更新时,今天更新记录=2000-前面更新记录
      

  4.   

    这是一个数学问题,等差数列的前n项和公式如下Sn=[n(A1+An)]/2;带入各变量100000=[10000(第1项+最后1项)]/2最后1项=第1项+(100000-1)*公差偶数学不太好呀,推到这里,不知够条件解题了没? 呵呵
      

  5.   

    2楼兄弟的算法我还没看懂~
    不过有一点,我需要update的是那个注册时间RegDate
    update [user] set RegDate=??? where .........简化一下情况吧。
    假如:User表有15条记录,注册时间RegDate列全是2000-1-1,我要修改里面的注册时间RegDate字段。
    起始时间从2011-10-15处工起,假如今天的时间是2011-10-18,修改后结果是:
    Username     RegDate
      A1       2011-10-15
      A2       2011-10-15  A3       2011-10-16
      A4       2011-10-16
      A5       2011-10-16  A6       2011-10-17
      A7       2011-10-17
      A8       2011-10-17
      A9       2011-10-17  A10      2011-10-18
      A11      2011-10-18
      A12      2011-10-18
      A13      2011-10-18
      A14      2011-10-18
      A15      2011-10-18最后多出的一些数全部update成最后一天。
      

  6.   


    递增是奇数
    set nocount on;if OBJECT_ID('User') is not null
    drop table [User]
    go
    Create table [User]
    (
    uId int identity,
    Username nvarchar(50),
    RegDate datetime default('2010-1-1')
    )
    go
    insert [User](UserName) values('A')
    go 15go
    update [User] set UserName=UserName+RTRIM(Uid)
    go
    declare @dt datetime,@dt2 datetime,@i int,@con int,@j int,@maxcon int
    set @dt='2011-10-15'
    set @maxcon=15
    select @i=1,@con=0,@j=1
    set @dt2='2011-10-18'
    while @con<@maxcon--更新15条记录为例
    begin
    set @j=@i*2-1
    if @dt=@dt2
    set @j=@maxcon-@con
    update top(@j) [User] set RegDate=@dt where RegDate='2010-01-01'
    select @con=@con+@@ROWCOUNT,@dt=@dt+1,@i=@i+1 
    endgo
    select * from [User]
    /*
    uId Username RegDate
    1 A1 2011-10-15 00:00:00.000
    2 A2 2011-10-16 00:00:00.000
    3 A3 2011-10-16 00:00:00.000
    4 A4 2011-10-16 00:00:00.000
    5 A5 2011-10-17 00:00:00.000
    6 A6 2011-10-17 00:00:00.000
    7 A7 2011-10-17 00:00:00.000
    8 A8 2011-10-17 00:00:00.000
    9 A9 2011-10-17 00:00:00.000
    10 A10 2011-10-18 00:00:00.000
    11 A11 2011-10-18 00:00:00.000
    12 A12 2011-10-18 00:00:00.000
    13 A13 2011-10-18 00:00:00.000
    14 A14 2011-10-18 00:00:00.000
    15 A15 2011-10-18 00:00:00.000
    */
      

  7.   

    Create table [User]
    (
    uId int identity,
    Username nvarchar(50),
    RegDate datetime default('2010-1-1')
    )
    go
    insert [User](UserName) values('A')
    go 20update [User] set UserName=UserName+RTRIM(Uid)
    select * from [User]
    truncate table [user]declare @dt datetime,@n int, @i int
    set @dt='2011-01-01'
    select  @n=3,@i=2
    while exists(select 1 from [user] where uId=@i)
    begin
       update top(@n) [User] set RegDate=@dt where RegDate='2010-01-01'
       set @dt=@dt+1
       set @i=@i+1
       set @n=@i*2-1
    end