如何使用TSQL生成唯一用户名?

时间:2017-02-22 10:03:22

标签: sql-server tsql

我正在尝试为系统中的每个用户生成唯一的登录用户名。

到目前为止,我所做的是:

Select p.FirstName+P.LastName + p.PersonId from person As P
  

此处1255是主键。输出类似于JamesHarley1255,   但是我不想使用Primarykey。还有什么   另类。也会有许多重复记录。   假设我需要一个函数,每次在1到n个数字之间生成一个唯一的数字。不知怎的,我需要像JamesHarley125那样产生输出

4 个答案:

答案 0 :(得分:2)

试试这个,

    Select p.FirstName+P.LastName +CAST(ROW_NUMBER() OVER (ORDER BY p.FirstName) AS VARCHAR(20)) 
    from  person As P

答案 1 :(得分:1)

如果您想在不使用主键列的情况下针对每条记录获取一个唯一列,我认为您可以使用行号功能。下面的查询应该适用于这种情况

Select p.FirstName+P.LastName + CAST((row_number() OVER ( PARTITION BY p.FirstName ORDER BY p.FirstName)) AS varchar(100)) from person As P

答案 2 :(得分:0)

您可以使用identity属性创建具有增量整数的列,并且可以使用第一个名称和姓氏将其连接起来。这样每一行都是唯一的。

  

从人As P

中选择p.FirstName + P.LastName + P.Id

此处列P.Id可以在表定义中声明如下。这将从价值' 1'开始。并将以' 1'的比例递增。身份(种子,增量)

id int IDENTITY(1,1)

答案 3 :(得分:0)

建立以前的响应,这会生成尽可能没有数字的用户名,然后只添加数字以使用户名在实际需要的地方唯一。我知道这不是您生成用户名的确切方式,但这就是我决定生成我的用户名的方式。我刚刚更改了表名以匹配你的名字。

with Usernames(PersonId, Username) as
(
    select PersonId, 
           left(Firstname, 1) + Middlename + Lastname as Username
      from Person
),
NumberedUserNames(PersonId, Username, Number) as
(
    select PersonId,
           Username,
           ROW_NUMBER() OVER (PARTITION BY Username ORDER BY Username) as Number
      from Usernames
), 
UniqueUsernames(PersonId, UniqueUsername) AS
(
    select PersonId,
           case when Number = 1 then UserName 
                                else UserName + CAST(Number-1 as VarChar(20))
           End as UniqueUsername
      from NumberedUserNames
)
select PersonId,
       UniqueUsername
  from UniqueUsernames;