【问题标题】:Generating Unique Usernames in SQL Server在 SQL Server 中生成唯一用户名
【发布时间】:2012-02-01 15:26:25
【问题描述】:

我很好奇人们是如何处理以下情况的。假设我们有一个如下所示的用户表:

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 生成唯一的“计数”。我当然不想显示“welcome userXXX-XXX-XXX之类的。

我的想法可能是为此使用 int IDENTITY 构建一个单独的表并将 guid 存储在其中??

【问题讨论】:

  • Example of why this would happen. "OpenId Registration for instance"的部分不清楚。
  • 我的 OPenId 注册不需要电子邮件地址。类似于 StackOverflow,所以我需要自动创建某种字符串值来识别我在幕后为他们创建的内部用户帐户。
  • 是的,我明白了。好吧,我给它加了星标,我很想知道这个问题的解决方案。
  • 迈克,这看起来很有趣databasejournal.com/features/mssql/…
  • 我记得 DB2 中的类似内容

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


【解决方案1】:

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

【讨论】:

  • 多个数据库实例 :) 会产生更多问题
  • Magnus,半小时前我也回答了同样的问题,然后当我意识到问题时,我在任何人反对之前删除了我的答案。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-11-28
    • 2011-09-16
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2014-07-20
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多