在SQL Server中生成唯一的用户名

时间:2012-01-03 15:51:08

标签: sql-server-2008 database-design relational-database

我很好奇人们如何处理以下情况。假设我们的用户表看起来像这样:

CREATE TABLE [dbo].[Users](
[UserId] [uniqueidentifier] NOT NULL,
[ProfileId] [uniqueidentifier] NULL,
[UserTypeId] [uniqueidentifier] NOT NULL,
[UserName] [varchar](150) NOT NULL,
[Password] [varchar](150) NOT NULL,
[Salt] [nchar](10) NOT NULL,
[ActivationCode] [char](8) NULL,
[InvalidLoginAttempts] [int] NOT NULL,
[IsLockedOut] [int] NOT NULL,
[LastLoginDate] [datetime2](7) NOT NULL,
[Active] [int] NOT NULL,
[DateCreated] [datetime2](7) NOT NULL,
[LastUpdated] [datetime2](7) NOT NULL,

所以这是我的实际问题。以前当使用int作为PK时,如果用户没有提供用户名,我可以插入用户并根据身份插入自动创建用户名。为什么会发生这种情况的例子。 “例如OpenId注册”那么如何使用guid生成一个独特的“计数”。我当然不想显示“欢迎use​​rXXX-XXX-XXX等等。

我的想法可能是为此构建一个单独的表和int IDENTITY并将guid存储在那里?

2 个答案:

答案 0 :(得分:1)

为什么不在表中添加另一个带有标识的列并使用它。 或者选择一个随机数,检查userName是否已经存在,如果是,则生成新的。

答案 1 :(得分:0)

根据Magnus的提议,您可以通过连接表中的其他int / autonumber字段+服务器名称(或数据库名称)或部分名称来构建默认用户名!

假设您运行了SERV1,SERV2,SERV3。然后,您可以将默认用户名构建为userSERVX_Y或userSERVX0000Y等。您的用户名构建方案将取决于您的服务器命名策略。如果您的服务器名称不够“性感”,您可以为服务器添加一个包含别名的表。