[SQL Server] 簡單產生亂數字串

今天在寫程式中突然有個功能需要在資料庫中產生亂數字串,原本是想要 Google 幾下拿人家的來用,但是後來想想,這功能並不難,還是自己寫一下好了 ...

今天在寫程式中突然有個功能需要在資料庫中產生亂數字串,原本是想要 Google 幾下拿人家的來用,但是後來想想,這功能並不難,還是自己寫一下好了 ... 這段指令碼十分簡單,只是用來產生亂數字串而已,不過亂數字串可用的地方可多了,包含 temporary folder name 或是作為雜湊密碼的 salt 值等等。

以下就是這段指令碼:

BEGIN

   DECLARE @str varchar(20)
   DECLARE @length int, @c int
   DECLARE @chars varchar(100)
   SET @chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
   SET @length = 20
   SET @c = 0
   SET @str = ''
   WHILE (@c < @length)
   BEGIN
       DECLARE @n int
       SET @n = RAND() * 100
       IF (@n <= LEN(@chars))
       BEGIN
          SET @str = @str + SUBSTRING(@chars, @n, 1)
          SET @c = @c + 1
       END
   END
   SELECT @str
END

指令碼只有幾個 keypoint:

  • 每次都使用亂數產生數值,而當值落在 1 ~ @chars 的長度時,就由 @chars 變數中取出一個字元。
  • 由 @length 設定長度,所以如果要長一點或短一點,@length 的值要改一下,@str 的長度也是。
  • 如果成功取出數值,則將字元加到 @str 中,且增加 @c 的值。
  • 當 @c = @length 時,結束迴圈。

想要的人可以將它改成 SP 或直接執行都可以 (因為 RAND 的關係,不能用在 UDF...)。