今天在寫程式中突然有個功能需要在資料庫中產生亂數字串,原本是想要 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...)。