问题可能在:
1:set @whono=convert(varchar(50), convert(bigint,@startno)+@idx)
2:  update testtable set tno= right(('00000000'+convert(varchar,(@idx+1))), 8)
  3:where tno=@whono你跟踪一下这里都是些什么值

解决方案 »

  1.   

    CONVERT(BIGINT, @startno) 这个转换 '00000004'为4 加上0 以后再转换成 VARCHAR的话还是4而你 tno= right(('00000000'+convert(varchar,(@idx+1))), 8)得到的字符串是0000004这样的 所以UPDATE的时候
    where tno=@whono条件过滤出来的当然是0 明白?
      

  2.   

    ---TRYDECLARE
        @startno VARCHAR(10) ,--起始号
        @count INT ,--数量
        @idx INT ,--标识
        @whono VARCHAR(10)SET @startno='00000004'
    SET @count=1
    SET @idx=0WHILE @idx<@count 
        BEGIN
            SET @whono=CONVERT(VARCHAR(50), RIGHT(10000000+@startno+@idx,8))
            UPDATE
                testtable
            SET tno=RIGHT(('00000000'+CONVERT(VARCHAR, (@idx+1))), 8)
            WHERE
                tno=@whono
            SET @idx=@idx+1
        END
      

  3.   

    DECLARE
        @startno VARCHAR(10) ,--起始号
        @count INT ,--数量
        @idx INT ,--标识
        @whono VARCHAR(10)SET @startno='00000004'
    SET @count=1
    SET @idx=0WHILE @idx<@count 
        BEGIN
            SET @whono=CONVERT(VARCHAR(50), RIGHT(10000000+CAST(@startno AS BIGINT)+@idx,8))
            UPDATE
                testtable
            SET tno=RIGHT(('00000000'+CONVERT(VARCHAR, (@idx+1))), 8)
            WHERE
                tno=@whono
            SET @idx=@idx+1
        END
      

  4.   

    set @whono=convert(varchar(50), convert(bigint,@startno)+@idx)
    print @whono
    怎么会过滤掉为: 4
      

  5.   

    set @whono=convert(varchar(50), convert(bigint,@startno)+@idx)
    这一步会转换成bigint类型,也就是把0000004变成4了,你外层再进行convert也是还是这个数字,只是类型改变了而已
      

  6.   

    SET @whono=CONVERT(VARCHAR(50), RIGHT(00000000+CAST(@startno AS BIGINT)+@idx,8))
    print  @whono
    结果还是 4 啊    ,怎么保留前面的0
      

  7.   

    SET @whono=CONVERT(VARCHAR(50), RIGHT('00000000'+CAST(@startno AS varchar)+@idx,8))
      

  8.   


    这样呢:
    SET @whono=CONVERT(VARCHAR(50), RIGHT('00000000'+CAST(@startno AS BIGINT)+@idx,8))
    print  @whono
      

  9.   

    00000000 没有带有单引号的话sqlserver还是认为是数值型
      

  10.   

    SET @whono=CONVERT(VARCHAR(50), RIGHT('00000000'+CAST(@startno AS BIGINT)+@idx,8))
       print  @whono输出结果还是:4
      

  11.   

    select  RIGHT('00000000'+CAST(@startno +@idx as varchar),8)