2012-01-03 83 views
2

我很好奇人們如何處理以下情況。比方說,我們有一個用戶表,看起來像這樣:在SQL Server中生成唯一的用戶名

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的身份和存儲在那裏?

+0

說的部分'爲什麼會發生這種情況的例子。 「例如OpenId註冊」不清楚。 – 2012-01-03 15:56:40

+0

我不需要我的OPenId註冊的電子郵件地址。與StackOverflow類似,所以我需要自動創建某種字符串值來識別我在幕後爲他們創建的內部用戶帳戶。 – CrazyCoderz 2012-01-03 16:00:55

+0

是的,我明白了。好吧,我出演了它,我會好奇地看到這個問題的解決方案。 – 2012-01-03 16:07:07

回答

1

爲什麼全局唯一標識符不只是在表中添加另一個帶有標識的列並使用它 或者選擇一個隨機數,檢查用戶名是否已經存在,如果是這樣,生成一個新的數字

+0

多個數據庫實例:)會產生更多問題 – CrazyCoderz 2012-01-03 16:31:52

+0

我不關注... – Magnus 2012-01-03 16:33:31

+0

身份在SQL服務器實例中不是唯一的。 – CrazyCoderz 2012-01-03 16:42:20

0

以下Magnus的建議,你可以通過連接建立一個默認的用戶名錶中額外的int/autonumber字段+服務器名稱(或數據庫名稱),或者它的一部分!

假設您已經運行了SERV1,SERV2,SERV3。然後,您可以將默認用戶名構建爲userSERVX_Y或userSERVX0000Y等。您的用戶名構建方案將取決於您的服務器命名策略。如果你的服務器名稱不夠「性感」,你可以爲你的服務器添加一個帶有別名的表格。