这样算了:update a
set Number='ZF-'+right((select count(*) from 表 where Area<= a.Area),6)      
from 表 a

解决方案 »

  1.   

    DECLARE temp_cursor CURSOR FOR
    SELECT number
    FROM zfzOPEN temp_cursorDeclare @ZF varchar(3),@str2 varchar(17),@temp varchar(20);
    set @ZF='ZF-'
    set @str2=0.000000FETCH NEXT from temp_cursor
    WHILE @@FETCH_STATUS = 0
    BEGIN
       set @str2=@str2+0.000001
       set @Temp=@str2
       set @temp=subString(@temp,3,6)
       set @temp=@ZF+@temp
       update zfz set Number=@temp   --这句有问题,希望各位大虾指教
       where current of temp_cursor  --*****如果用游标,改为此 ***--
       FETCH NEXT from temp_cursor
    ENDCLOSE temp_cursor
    DEALLOCATE temp_cursor
      

  2.   


    --最简单的就是直接这样更新
    declare @i int
    set @i=1000000
    update zfz set @i=@i+1,Number='ZF-'+right(@i,6)
      

  3.   

    --这个帖子不是刚刚解决吗?--测试--测试数据
    create table zfz(Number char(9),Area varchar(10))
    insert zfz select null,'西安'
    union  all select null,'咸阳'
    union  all select null,'宝鸡'
    go--最简单的就是直接这样更新
    declare @i int
    set @i=1000000
    update zfz set @i=@i+1,Number='ZF-'+right(@i,6)
    go--显示更新的结果
    select * from zfz
    go--删除测试
    drop table zfz/*--测试结果
    Number    Area       
    --------- ---------- 
    ZF-000001 西安
    ZF-000002 咸阳
    ZF-000003 宝鸡(所影响的行数为 3 行)
    --*/
      

  4.   

    邹哥的办法高,update zfz set @i=@i+1,Number='ZF-'+right(@i,6)在一条语句里能跟据记录数改变
      

  5.   

    这种活用游标太兰费拉一个UPDATE语句即可
      

  6.   

    要充分 理解 SQL 是 4GL 這一特性
    操作不是一條條的, 是一個一個集合的!儘量不使用 Cursor!