T-Sql

為什麼在while循環中隨機密碼生成相同?TSQL

  • May 18, 2018

我有一個隨機密碼生成器。它本身工作正常。當我把它放在一個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

這會產生如下輸出:

如您所見,guid 每次都不同,但密碼相同。 如何使每次迭代的密碼都不同?在此處輸入圖像描述

您需要清除@r每個循環的值。

declare @r varchar(6);
set @r = ''; -- Clear previous value
select @r = coalesce(@r, '') + char ...

我可以看到您認為declare @r varchar(6);會為您這樣做,但事實並非如此。

查看在儲存過程的 while 塊內定義的變數範圍 - SQl Server以獲得更多變數聲明的樂趣。

引用自:https://dba.stackexchange.com/questions/207189