sql-server2005下生成定长的随机字符串
2013-11-01 22:25
281 查看
写的是存储过程,里边肯定有很多不足的地方,希望大家指正
先贴代码:
利用以下语句调用查询:
基本的思路是:先创建ASCII码表,这个应该先写到一个视图里应该会更好,然后利用循环实现:
字符串长度控制循环次数,循环体内每次都利用order by newid()随机选取top1个字符,插入到一个临时表中
最后利用for xml path('')把字段中的所有数据连接起来
先贴代码:
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('')把字段中的所有数据连接起来
相关文章推荐
- 杂谈---令人抓狂的数据库行级锁问题
- Oracle 块的基本形式
- 论mongodb
- ORACLE正则表达式函数详解--转载整理
- Lsnrctl命令参数
- Oracle中的事务讲解
- Oracle 11g统计信息收集
- listener.ora/sqlnet.ora/tnsnames.ora配置文件详解
- ORACLE package包中的存储过程的定义和使用
- Redis系列-set类型和zset类型
- 字符集问题(Linux、oracle、终端等,导入导出数据)
- SQL-SQL中binary 和 varbinary的区别
- oracle学习第一天
- ios sqlite
- 查询长事务SQL
- SQLite教程
- Oracle数据类型与.NET中的对应关系
- SQLite教程
- OPENFIRE+MYSQL5.6安装中遇见Specified key was too long; max key length is 767 bytes openfire处理办法
- 如何查看mysql连接相关参数