T-Sql
為什麼在while循環中隨機密碼生成相同?TSQL
我有一個隨機密碼生成器。它本身工作正常。當我把它放在一個while循環中時,即使種子看起來不同,我也會得到相同的密碼。
declare @count int = 0 declare @end int = 500 while (@count < @end) BEGIN DECLARE @r varchar(6) select @r = coalesce(@r, '') +char( case when r between 0 and 9 then 48 when r between 10 and 35 then 55 else 61 end + r) from master..spt_values cross join (SELECT CAST(RAND(ABS(CHECKSUM(NEWID()))) *61 as int) r) a where type = 'P' and number < 6 print(newId()) print(@r) set @count = @count + 1 END
這會產生如下輸出:
您需要清除
@r
每個循環的值。declare @r varchar(6); set @r = ''; -- Clear previous value select @r = coalesce(@r, '') + char ...
我可以看到您認為
declare @r varchar(6);
會為您這樣做,但事實並非如此。查看在儲存過程的 while 塊內定義的變數範圍 - SQl Server以獲得更多變數聲明的樂趣。