zoukankan      html  css  js  c++  java
  • T-SQL生成X个不重复的Y位长度的随机数

    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))

    写一个存储过程来应用上面这篇的SQL语句:

    up_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].[up_RandomNumber] 8,10

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


  • 相关阅读:
    $("").append无反应
    go 客户端、服务端
    go mysql insert变量到数据库
    .gvfs: Permission denied
    go笔记
    java socket通信笔记
    (转)linux中top命令下显示出的PRNIRESSHRS\%MEM TIME+都代表什么
    adb Android Debug Bridge 安卓调试桥
    一阶段冲刺(四)
    一阶段冲刺(三)
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126513.html
Copyright © 2011-2022 走看看