请教!!
我想在删除时某一行时自动更新编号列,就是全部置空然后重新累加
1,2,3,4这样。
但是。。
----------------------
select count(falseID) from doctordeclare @i int
set @i=1
while(11)//上面求出的总行数
begin
update doctor set falseID=@i where falseID=0
@i+1
end哎 条件怎么弄啊 SQL怎么控制游标的下移呢,这样的话 我就可以顺序更新了 不需要上移下移就行了

解决方案 »

  1.   

    declare @i int ,@count int
    select @count = (falseID) from doctor 
    set @i=1 
    while(@i<=@count)//上面求出的总行数 
    begin 
    update doctor set falseID=@i where falseID=0 
    @i+1 
    end 
      

  2.   

    declare @i int ,@count int 
    select @count = (falseID) from doctor  set @i=1  
    while(@i <=@count)
    begin  
    update doctor set falseID=@i where falseID=0  
    set @i=@i+1  
    end  清空后 执行你这个后居然提示命令已成功完成 没提示影响的行数 结果是。。一行都没更新。。
      

  3.   

    如果只有一个falseID字段而没有其他字段可以唯一确定记录的话,是没办法按你的要求去更新重新排序的
      

  4.   

    update doctor set falseID=@i where falseID=0 
    会把所有falseID=0的记录的falseID字段都设置为@i的值
    楼上的代码之所以没更新,我觉得select @count = (falseID) from doctor  这条语句执行后@count的值很有可能是0
      

  5.   


    --开始事务
    BEGIN TRAN--不显示计数信息
    SET NOCOUNT ONDECLARE @falseID  nvarchar(50)
    DECLARE @a int 
    set @a=1--声明游标
    DECLARE falseID_cursor CURSOR FOR 
    SELECT [falseID] FROM  doctor  --打开游标
    OPEN falseID_cursor--取第一行的值给变量
    FETCH NEXT FROM falseID_cursor 
    INTO @falseID  --执行语句 
    update doctor set falseID=@a where falseID=@falseID   
    set @a=@a+1  
    --执行错误回滚
    if @@error!=0
    begin
    rollback tran
    return
    end
    --移动游标,其它所有行更新操作(当到结尾时退出)
    WHILE @@FETCH_STATUS = 0
    BEGIN 
    --游标移到下一行
    FETCH NEXT FROM falseID_cursor 
    INTO @falseID  --执行语句,从第二行开始
    update doctor set falseID=@a where falseID=@falseID   
    set @a=@a+1 --执行错误回滚
    if @@error!=0
    begin
    rollback tran
    return
    endEND
    --关闭游标
    CLOSE CRMPSContact_cursor--释放游标
    DEALLOCATE CRMPSContact_cursor--提交所有变更
    COMMIT TRAN--恢复设置
    SET NOCOUNT OFF
    GO 
      

  6.   

    上面的回答一个地方写错了,更正一下。BEGIN TRAN
    SET NOCOUNT ONDECLARE @falseID  nvarchar(50)
    DECLARE @a int 
    set @a=1DECLARE falseID_cursor CURSOR FOR 
    SELECT [falseID] FROM  doctor  OPEN falseID_cursorFETCH NEXT FROM falseID_cursor 
    INTO @falseID  update doctor set falseID=@a where falseID=@falseID   
    set @a=@a+1  --执行错误回滚
    if @@error!=0
    begin
    rollback tran
    return
    end
    --移动游标,其它所有行更新操作(当到结尾时退出)
    WHILE @@FETCH_STATUS = 0
    BEGIN FETCH NEXT FROM falseID_cursor 
    INTO @falseID  
    update doctor set falseID=@a where falseID=@falseID   
    set @a=@a+1 --执行错误回滚
    if @@error!=0
    begin
    rollback tran
    return
    endEND
    --关闭游标
    CLOSE falseID_cursor   --  上面的回答这里游标名称写错了--释放游标
    DEALLOCATE falseID_cursor --提交所有变更
    COMMIT TRAN--恢复设置
    SET NOCOUNT OFF
    GO 
      

  7.   

    楼上的,LZ似乎是要更新falseID=0的记录,因为有这句update doctor set falseID=@i where falseID=0