【无标题】

这篇博客介绍了如何在SQLServer中创建存储过程来生成包含特定字符集的随机字符串。提供了两种不同的方法,一种是生成指定长度的随机字符串,包含大写字母、小写字母、数字和特殊字符,另一种则确保生成的字符串至少包含这四种字符中的每一种。此外,还给出了校验字符串是否符合规则的代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL Server 实现随机生成和校验包含指定字符的随机字符串

SQL Server 实现随机生成包含指定字符的随机字符串

简单代码如下:


```sql

/*
	随机生成指定长度的随机字符串
	随机包含大写字母、小写字母、数字、特殊字符中至少一种
	SQL Server
*/
--declare @a nvarchar(50)='';
--exec dbo.[proc_gen_randomstr] 9,@a output 
--select @a
CREATE proc [dbo].[proc_gen_randomstr](@strlen int,@str nvarchar(50) output)
as
begin 
	set @strlen = case when @strlen > 50 then 50 else @strlen end;
	declare @i int=1
	declare @flag int=1  
	declare @randomstr nvarchar(50)=''
	declare @specialchars nvarchar(50) = '~!@#$%^&*()_+{}:"?></.,;''\][=-`'
	declare @specialpos int = ceiling(rand()*31) 
	while( @i <= @strlen )
	begin
		set @flag=ceiling(rand()*4) 
		if @flag=1 
		begin
			set @randomstr=@randomstr+char(65+ceiling(rand()*25))
		end
		else if @flag=2
		begin
			set @randomstr=@randomstr+char(97+ceiling(rand()*25))
		end
		else if @flag=3
		begin
			set @randomstr=@randomstr+SUBSTRING(@specialchars,@specialpos,1)
		end
		else
		begin
			set @randomstr=@randomstr+cast(floor(rand()*(10)) as nvarchar(1))
		end
		set @i=@i+1
	end
	set @str = @randomstr;
end
GO



/*
	随机生成十位随机字符串
	必须包含大写字母、小写字母、数字、特殊字符
	SQL Server
*/
CREATE PROC [dbo].[proc_get_roundstr]  @roundstr nvarchar(50)  output 
as
begin
set @roundstr=CHAR(ROUND(RAND() * 25 + 65,0))+CHAR(ROUND(RAND() * 25 + 97,0))+CHAR(ROUND(RAND() * 9 + 48,0))+CHAR(ROUND(RAND() * 25 + 65,0))
       +CHAR(ROUND(RAND() * 13 + 33,0))+CHAR(ROUND(RAND() * 25 + 97,0))+CHAR(ROUND(RAND() * 9 + 48,0))+CHAR(ROUND(RAND() * 25 + 65,0))
	   +CHAR(ROUND(RAND() * 25 + 97,0))+CHAR(ROUND(RAND() * 9 + 48,0)) 
end
GO

SQL Server 字符串生成规则校验

校验规则如下:



```sql
if(ASCII(substring(@password,@i,1)) between 48 and 57)                                 
begin                                                 
	print N'包含数字'                           
end                                                          
if (ASCII(substring(@password,@i,1)) between 65 and 90)                                 
begin                                                             
	print N'包含大写字母'                              
end                                                           
if (ASCII(substring(@password,@i,1)) between 97 and 122)                                 
begin                                                              
	print N'包含小写字母'                             
end               
if (ASCII(substring(@password,@i,1))<=47 or ASCII(substring(@password,@i,1)) between 58 and 64  or ASCII(substring(@password,@i,1)) between 91 and 96 or ASCII(substring(@password,@i,1))>=123 )                                 
begin                                                                
	print N'包含特殊字符'                              
end                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值