Bạn muốn tạo một chuỗi ký từ ngẫu nhiên như việc tạo Password, Hay tạo mã sản phẩm? Trên hmweb đã có bài tạo chuỗi ngẫu nhiên bằng C#. Bài này tôi giới thiệu thủ tục trong SQL server
Thủ tục được tạo như sau:
CREATE PROCEDURE [dbo].[sp_GeneratePassword]
@Length int
AS
BEGIN
DECLARE @RandomID varchar(32)
DECLARE @counter smallint
DECLARE @RandomNumber float
DECLARE @RandomNumberInt tinyint
DECLARE @CurrentCharacter varchar(1)
DECLARE @ValidCharacters varchar(255)
SET @ValidCharacters='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
DECLARE @ValidCharactersLength int
SET @ValidCharactersLength = len(@ValidCharacters)
SET @CurrentCharacter = ''
SET @RandomNumber = 0
SET @RandomNumberInt = 0
SET @RandomID = ''
SET NOCOUNT ON
SET @counter = 1
WHILE @counter < (@Length + 1)
BEGIN
SET @RandomNumber = Rand()
SET @RandomNumberInt = Convert(tinyint,
((@ValidCharactersLength - 1) * @RandomNumber + 1))
SELECT @CurrentCharacter =
SUBSTRING(@ValidCharacters, @RandomNumberInt, 1)
SET @counter = @counter + 1
SET @RandomID = @RandomID + @CurrentCharacter
End
Select @RandomID As Pass
END
Thủ tục này sẽ lấy chuỗi ngâu nhiên bao gồm @Length ký tự từ chuỗi cho trước ABC...YZ1234567890.
Ví dụ bạn muốn lấy chuỗi ngẫu nhiên có độ dài là 8 ký tự bạn thực hiện: Exec sp_GeneratePassword 8 Sẽ sinh ra cho bạn chuỗi '9WAVZ3'
Thủ tục trên chỉ lấy ngẫu nhiên trong dãy ký tự đã có trước. Giờ bạn cải tiến đi một chút để dãy ký tự này cũng được chuyền vào thành tham số như sau:
CREATE PROCEDURE sGeneratePassword_InputString
@Length int,
@InputString nvarchar(255)
AS
BEGIN
DECLARE @RandomID varchar(32)
DECLARE @counter smallint
DECLARE @RandomNumber float
DECLARE @RandomNumberInt tinyint
DECLARE @CurrentCharacter varchar(1)
DECLARE @InputStringLength int
SET @InputStringLength = len(@InputString)
SET @CurrentCharacter = ''
SET @RandomNumber = 0
SET @RandomNumberInt = 0
SET @RandomID = ''
SET NOCOUNT ON
SET @counter = 1
WHILE @counter < (@Length + 1)
BEGIN
SET @RandomNumber = Rand()
SET @RandomNumberInt = Convert(tinyint, ((@InputStringLength - 1) * @RandomNumber + 1))
SELECT @CurrentCharacter = SUBSTRING(@InputString, @RandomNumberInt, 1)
SET @counter = @counter + 1
SET @RandomID = @RandomID + @CurrentCharacter
End
Select @RandomID As Pass
END
Giờ bạn chạy thử với lệnh:
Exec sGeneratePassword_InputString 8,'abcqwertyuiolkjAHSNKA09876jh&654321'
Biến thứ 2 là tùy ý bạn truyền vào một dãy ký tự tùy thích kết quả minh họa là '60rje52u', Với mỗi lần thực thi thì kết quả sẽ một khác
Hy vọng nó có ích với bạn. Chúc bạn thành công