首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为SQL server表中的用户生成随机令牌(唯一id)

为SQL server表中的用户生成随机令牌(唯一id)
EN

Stack Overflow用户
提问于 2017-12-08 20:45:13
回答 1查看 8.4K关注 0票数 3

我想在sql server中创建一个表,并用数据(people's info)填充它。目标是在第一行中获得每个人唯一的ID,该ID必须以固定的字母表GM开头,后面是A-Z2-9数字、首字母的名、姓的首字母以及A-Z2-9

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-08 21:50:43

注意:根据您请求的逻辑,如果不检查表没有包含生成的值,我认为您无法生成唯一的值,唯一的方法是使用生成GUID的NEWID()函数,否则我认为始终存在重复风险

我不知道这是否是最好的方法,但我可以说,它提供了预期的产出。您可以创建此函数并使用它生成标识符:

代码语言:javascript
运行
复制
ALTER FUNCTION dbo.CreateIdentifier
(
    -- Add the parameters for the function here
    @Firstname varchar(255),
    @Lastname varchar(255),
    @random1 decimal(18,10) ,
    @random2 decimal(18,10)
)
RETURNS varchar(10)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @S VARCHAR(10)
    DECLARE @S1 VARCHAR(1)
    DECLARE @S2 VARCHAR(1)
    DECLARE @len INT
    DECLARE @Random1Fixed INT
    DECLARE @Random2Fixed INT

    declare @alphabet varchar(36) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ23456789'



    SET @alphabet = REPLACE(@alphabet,LEFT(@Lastname,1),'')
    SET @alphabet = REPLACE(@alphabet,LEFT(@Firstname,1),'')

    SELECT @len = len(@alphabet)
    SET @Random1Fixed = ROUND(((@len - 1 -1) * @random1 + 1), 0)
    SET @Random2Fixed = ROUND(((@len - 1 -1) * @random2 + 1), 0)


    SET @S1 = substring(@alphabet, convert(int, @Random1Fixed ), 1)
    SET @S2 = substring(@alphabet, convert(int, @Random2Fixed), 1)

    SET @S = 'GM' + @S1 + LEFT(@Firstname,1) + LEFT(@Lastname,1) + @S2
    RETURN @S

END

您可以将其用作以下内容

代码语言:javascript
运行
复制
SELECT dbo.CreateIdentifier('John','Wills',RAND(),RAND())

我将RAND()作为参数传递,因为它不能在函数中使用。

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

https://stackoverflow.com/questions/47721893

复制
相关文章

相似问题

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