加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server 不重复的随机数

发布时间:2020-12-12 07:40:21 所属栏目:MsSql教程 来源:网络整理
导读:感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! MSSQL随机数 MSSQL有一个函数CHAR()是将int(0-255) ASCII代码转换为字符。那我们可以使用下面MS SQL语句,可以随机生成小写、大写字母,特殊字符和数字。 大写字母: CHAR(ROUND(RAND()

感兴趣的小伙伴,下面一起跟随编程之家 52php.cn的小编两巴掌来看看吧!

MSSQL随机数
MSSQL有一个函数CHAR()是将int(0-255) ASCII代码转换为字符。那我们可以使用下面MS SQL语句,可以随机生成小写、大写字母,特殊字符和数字。

大写字母:
CHAR(ROUND(RAND() * 25 + 65,0))

小写字母:
CHAR(ROUND(RAND() * 25 + 97,0))

特殊字符:
CHAR(ROUND(RAND() * 13 + 33,0))

数字:
CHAR(ROUND(RAND() * 9 + 48,0))
刚才有位网友在SKYPE问及如上问题。
好的,Insus.NET也正想写一个存储过程来应用上面这篇的SQL语句,你可以参考如下的存储过程,如果还问题请继续讨论。

代码如下:

 
usp_RandomNumber 
CREATE PROCEDURE [dbo].[usp_RandomNumber] 
( 
@Len INT = 1,--随机数位数 
@Rows INT = 1 --随机笔数 
) 
AS 
BEGIN 
DECLARE @T AS TABLE([Random Number] VARCHAR(MAX)) 
DECLARE @L INT = 1,@R INT = 1 
WHILE @R <= @Rows 
BEGIN 
DECLARE @RN varchar(MAX) = '' 
WHILE @L <= @Len --随机产生每个随数的位数 
BEGIN 
SET @RN = @RN + CHAR(ROUND(RAND() * 9 + 48,0)) 
SET @L = @L + 1 
END 
--如果产生相同的随机数,将不会存储 
IF NOT EXISTS(SELECT [Random Number] FROM @T WHERE [Random Number] = @RN) 
BEGIN 
INSERT INTO @T SELECT @RN --INSERT INTO @T ([Random Number])VALUES (@RN) 
SET @R = @R + 1 --记录总共产生了几笔随机数 
SET @L = 1 -- 每产生完一个随机数之后,将随机数的位数初始化为1 
END 
END 
SELECT [Random Number] FROM @T 
END 

当你把上面的存储过程附加入数据库之后,可以执行这个存储过程:

代码如下:

 
EXECUTE [dbo].[usp_RandomNumber] 8,10 

得到的结果(由于是随机产生,每次execute获得结果会不一样)

【图片暂缺】

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读