您的位置:首页 > 数据库

sql生成随机字符串

2017-12-07 10:00 169 查看
--1、借助newid()
go
--创建视图(因为在函数中无法直接使用newid())
createviewvnewid
as
selectnewid()N'MacoId';
go
--创建函数
createfunctiongetrandstr(@nint)
returnsvarchar(max)
as
begin
declare@iint
set@i=ceiling(@n/32.00)
declare@jint
set@j=0
declare@kvarchar(max)
set@k=''
while@j<@i
begin
select@k=@k+replace(cast(MacoIdasvarchar(36)),'-','')fromvnewid
set@j=@j+1
end
set@k=substring(@k,1,@n)
return@k
end

--测试示例
selectdbo.getrandstr(75)
--运行结果
/*
D185504AD09C4D5796F7016983E67414CEE25162EA9F43D195D43328A4CF01AC7C586521D8E
*/

--我们可以发现结果中的字母都是大写的,或是都是小写的。
--换种方法来写下:
go
--创建函数
createfunction[dbo].[m_rand](@mycountint)
returnsnvarchar(2000)
as
begin
declare@maco_wangtable(idvarchar(1))
declare@maco_numberint,@numberint;
declare@my_onenvarchar(max),@my_twonvarchar(max)
set@my_one='';set@maco_number=0;set@number=48;
while(@number>=48and@number<=57)or(@number>=65and@number<=90)or(@number>=97and@number<=122)
begin
insertinto@maco_wangselectchar(@number)
set@number=@number+1;
if(@number=58)
begin
set@number=65
end
if(@number=91)
begin
set@number=97
end
end
while@maco_number<@mycount
begin
select@my_two=idfrom@maco_wang
orderby(selectMacoIdfromdbo.vnewid);
set@my_one=@my_two+@my_one;
set@maco_number=@maco_number+1;
end
return@my_one
end
--测试用例
select[dbo].[m_rand](75)
--运行结果
/*
5nN0w4o4VOkjacB5so2uvCuw2ZRrnBhxEi4IcsEOHzBbStKmR1p8ASH4N4XaxhDoDEtkX8bZ0CR
*/



declare
@iint
set@i=1
while@i<=100000
begin
insertintotbl_Aselect[dbo].[m_rand](5)
set@i=@i+1
end


updatetbl_CsetUserPass=tbl_D.UserNamefromtbl_C,tbl_Dwheretbl_D.UserName=tbl_C.UserName
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: