问题可能在:
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: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你跟踪一下这里都是些什么值
where tno=@whono条件过滤出来的当然是0 明白?
@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
@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
print @whono
怎么会过滤掉为: 4
这一步会转换成bigint类型,也就是把0000004变成4了,你外层再进行convert也是还是这个数字,只是类型改变了而已
print @whono
结果还是 4 啊 ,怎么保留前面的0
这样呢:
SET @whono=CONVERT(VARCHAR(50), RIGHT('00000000'+CAST(@startno AS BIGINT)+@idx,8))
print @whono
print @whono输出结果还是:4