sql-server2005下生成定长的随机字符串

来源:互联网 发布:软件界面 英文 编辑:程序博客网 时间:2024/03/29 06:20

写的是存储过程,里边肯定有很多不足的地方,希望大家指正

先贴代码:

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER proc [dbo].[SjString](@len int,@out varchar(100) output)asif object_id('tempdb..#Mytable') is not nullbegin drop table #Mytableendcreate table #MyTable( [ASCII] int)-----插入组成字符串所需的基本ASCII码(数字+下划线+字母)declare @number intset @number=48while @number<123  ----z的ASCII是122beginif (@number between 48 and 57)or(@number between 65 and 90)or(@number=95)or(@number between 97 and 122)    insert into #MyTable([ASCII]) values(@number)set @number=@number+1endcreate table #My(String  char(2)) --用于临时存放字符信息while @len>0begindeclare @ASCII intselect top 1 @ASCII=[ASCII] from #MyTable order by newid()insert into #My select char(@ASCII)set @len=@len-1enddeclare @str xmlset @str=(select rtrim(ltrim(String)) from #My for xml path(''))drop table #Myset @out=cast(@str as varchar(100))

利用以下语句调用查询:

declare @out varchar(100)exec SjString 6,@out outputselect @out

基本的思路是:先创建ASCII码表,这个应该先写到一个视图里应该会更好,然后利用循环实现:

字符串长度控制循环次数,循环体内每次都利用order by newid()随机选取top1个字符,插入到一个临时表中

最后利用for xml path('')把字段中的所有数据连接起来