/*----------------------------------批量生成隨機的字符串----------------------------------*/
--如果在已知數據庫中存在GetRandStr這個存儲過程,則刪除(為了方便反復執行這段代碼)
if exists(select * from sys.objects where name='GetRandStr' and type='P')
drop proc GetRandStr
go
--隨機字符串存儲過程
create proc GetRandStr
-- @count是隨機字符串個數,@no則是最終生成的隨機字符串
(@count int,@no varchar(1000) output)
as
begin
--@randomstr是每次隨機的字符累加的值
declare @randomstr varchar(1000)
--@charpool是產生隨機字符的字符序列
declare @charpool varchar(1000)
-- @i是循環次數
declare @i int
--@counter 是產生隨機字符的位置
declare @counter integer
--設置隨機序列
set @charpool='12345678910AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
--循環初始值
set @i=1
-- 隨機字符串初始值
set @randomstr=''
--循環
while @i<@count
begin
here:
--產生隨機字符位置 (0-62的整數)
set @counter=CAST(RAND()*100/1.6 as integer)
-- 如果@counter = 0 就重新生成隨機數
if @counter<1 goto here
set @randomstr=@randomstr+SUBSTRING(@charpool,@counter,1)
--循環遞增
set @i=@i+1
end
--最后將生成的六個隨機字符加上兩個固定字符'KY',組成所需的隨機字符串
set @no='QQ'+LEFT(@randomstr,ISNULL(@count,180))
return
end
go
--調用:比如要生成10個隨機字符串
declare @p int
set @p=1
while @p<=10
begin
declare @substring varchar(8000)
-- 調用存儲過程
exec GetRandStr 8,@substring output
-- 輸出隨機字符串
print @substring
set @p=@p+1
end