首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机分配一个范围内的唯一数字

随机分配一个范围内的唯一数字
EN

Stack Overflow用户
提问于 2012-08-30 22:04:16
回答 2查看 524关注 0票数 1

我需要为雇员列表分配一个从1到1000 (或任意数量的雇员)之间的唯一数字。这些数字不能重复,需要在员工列表中以随机顺序排列。每周还需要重新生成编号,以便为员工分配一个新编号。

我尝试使用以下代码,但是脚本速度很慢,它为所有员工返回相同的数字。

代码语言:javascript
复制
DECLARE @Random INT;
DECLARE @Upper INT;
DECLARE @Lower INT

SET @Lower = 1 
SET @Upper = 1000 
SELECT @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)
select personnum, firstnm, lastnm, (SELECT @Random)
from person

有人能解释一下如何做到这一点吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-30 22:23:07

可在mssql server 2005+上运行。

代码语言:javascript
复制
select personnum, firstnm, lastnm, row_number() over (order by newid()) randomnumber
from person
票数 4
EN

Stack Overflow用户

发布于 2012-08-30 22:10:13

为它创建一个函数。下面是我们使用的方法:

代码语言:javascript
复制
ALTER FUNCTION [dbo].[fn_GenerateUniqueNumber]()
RETURNS char(10)

AS 
BEGIN
    --DECLARE VARIABLES
    DECLARE @RandomNumber VARCHAR(10)
    DECLARE @I SMALLINT
    DECLARE @RandNumber FLOAT
    DECLARE @Position TINYINT
    DECLARE @ExtractedCharacter VARCHAR(1)
    DECLARE @ValidCharacters VARCHAR(255)
    DECLARE @VCLength INT
    DECLARE @Length INT

    --SET VARIABLES VALUE
    SET @ValidCharacters = '0123456789'   
    SET @VCLength = LEN(@ValidCharacters)
    SET @ExtractedCharacter = ''
    SET @RandNumber = 0
    SET @Position = 0
    SET @RandomNumber = ''
    SET @Length = 10
    SET @I = 1

    WHILE @I < ( @Length + 1 )
        BEGIN
            SET @RandNumber = (SELECT RandNumber FROM [RandNumberView])
            SET @Position = CONVERT(TINYINT, ( ( @VCLength - 1 ) * @RandNumber + 1 ))
            SELECT  @ExtractedCharacter = SUBSTRING(@ValidCharacters, @Position, 1)
            SET @I = @I + 1
            SET @RandomNumber = @RandomNumber + @ExtractedCharacter
        END

    RETURN @RandomNumber
END

要使用它,请执行以下操作:

代码语言:javascript
复制
SELECT personnum, firstnm, lastnm,dbo.fn_GenerateUniqueNumber()
FROM person

您可以修改参数和允许值,以确保它是您想要的数字类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12198729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档