sql - 为 SQL Server 中的表中的用户生成随机 token (唯一 ID)

标签 sql sql-server tsql

我想在 sql server 中创建一个表并用数据(人员信息)填充它。目标是让每个人在第一行都有一个唯一的 ID,该 ID 必须以固定字母 GM 开头,后跟 A-Z2-9数字,名字的首字母,姓氏的首字母和 A-Z2-9

最佳答案

注意:根据您请求的逻辑,我不认为您可以在不检查表不包含生成的值的情况下生成唯一值,唯一的方法是使用 NEWID() 生成 GUID 的函数,否则我认为总是存在重复风险

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

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

你可以像下面这样使用它

SELECT dbo.CreateIdentifier('John','Wills',RAND(),RAND())

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

关于sql - 为 SQL Server 中的表中的用户生成随机 token (唯一 ID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47721893/

相关文章:

mysql - 检测同一查询中数据库和表是否存在

php - sql - 在没有额外查询的情况下更新时检查行是否存在?

c# - 使用 C# 执行 SQL 查询

sql - SQL Server如何计算DATEDIFF函数?

sql-server - SQL Server 中的 FIND_IN_SET() 等效项

php - MySQL 设计说明

c# - 在没有 SQL Server 的情况下创建 C# 应用程序

sql-server - SSMS 无法连接到 SSRS

sql - 仅拉取 "-"左侧的文本

mysql脚本转t-sql脚本