您的位置:首页 > 数据库

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

2013-11-01 22:25 281 查看
写的是存储过程,里边肯定有很多不足的地方,希望大家指正

先贴代码:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER proc [dbo].[SjString](@len int,@out varchar(100) output)
as
if object_id('tempdb..#Mytable') is not null
begin
drop table #Mytable
end

create table #MyTable
( [ASCII] int)

-----插入组成字符串所需的基本ASCII码(数字+下划线+字母)
declare @number int
set @number=48

while @number<123  ----z的ASCII是122
begin
if (@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+1
end

create table #My(String  char(2)) --用于临时存放字符信息
while @len>0
begin
declare @ASCII int
select top 1 @ASCII=[ASCII] from #MyTable order by newid()
insert into #My select char(@ASCII)
set @len=@len-1
end

declare @str xml
set @str=(select rtrim(ltrim(String)) from #My for xml path(''))
drop table #My
set @out=cast(@str as varchar(100))


利用以下语句调用查询:

declare @out varchar(100)
exec SjString 6,@out output
select @out


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

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

最后利用for xml path('')把字段中的所有数据连接起来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: