【问题标题】:Unique Identifier Sql唯一标识符 Sql
【发布时间】:2014-11-05 17:31:03
【问题描述】:

以下是 asp 会员提供者表。我正在尝试添加同一应用程序的多个用户,但我无法在 ApplicationId 列中添加重复值。为什么会这样?

这是我用来在表中插入记录的查询:

Insert into Users 
values ('97C84F32-26A6-4A6C-960E-89A6A14D54E4', 'C2CADEDE-DA70-4C25-B717-6970344C8B34', 'John_doe', '', '', 1, '2014-11-05 21:28:33.043')

Insert into Users 
values ('97C84F32-26A6-4A6C-960E-89A6A14D54E4', 'D2CADEDE-CA70-4C25-B717-6970344C8B34', 'John_doe1', '', '', 1, '2014-11-05 21:28:33.043')

错误

无法在具有唯一索引“aspnet_Users_Index”的对象“dbo.Users”中插入重复的键行。重复键值为 (97c84f32-26a6-4a6c-960e-89a6a14d54e4, )。

这是我的用户表查询:

CREATE TABLE [dbo].[Users]
(
    [ApplicationId] [uniqueidentifier] NOT NULL,
    [UserId] [uniqueidentifier] NOT NULL,
    [UserName] [nvarchar](256) NOT NULL,
    [LoweredUserName] [nvarchar](256) NOT NULL,
    [MobileAlias] [nvarchar](16) NULL,
    [IsAnonymous] [bit] NOT NULL,
    [LastActivityDate] [datetime] NOT NULL,

    PRIMARY KEY NONCLUSTERED ([UserId] ASC)
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
              ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Users] ADD  DEFAULT (newid()) FOR [UserId]
GO

ALTER TABLE [dbo].[Users] ADD  DEFAULT (NULL) FOR [MobileAlias]
GO

ALTER TABLE [dbo].[Users] ADD  DEFAULT ((0)) FOR [IsAnonymous]
GO

ALTER TABLE [dbo].[Users] WITH CHECK 
    ADD FOREIGN KEY([ApplicationId])
    REFERENCES [dbo].[Applications] ([ApplicationId])
GO

任何帮助将不胜感激

【问题讨论】:

  • 向我们展示您用来添加这些用户的 SQL!
  • 我怀疑您要么无法在 UserId 中添加重复值,要么 ApplicationId 值在 Applications 中不存在?
  • @marc_s 我在我的问题中添加了这一点
  • 运行该 SQL 时遇到什么错误?
  • 好的-谢谢-但这只是一行-您谈到插入多个行数据。请向我们展示您插入的 second 行,该行使用相同的 ApplicationId 失败.....

标签: sql sql-server asp.net-membership membership-provider


【解决方案1】:

您遇到的错误是因为您的桌子上有一个PRIMARY KEY UserId 列。这意味着您无法在该列中插入具有相同值的多行。

如果您想插入相同的UserId 但具有不同的ApplicationId,您应该将主键更改为包含UserId 和ApplicationId 的复合键。

或者,您的 INSERT 语句可能需要更改,因为您依赖于正确的列位置。而是指定列:

Insert into Users
(ApplicationId, UserId, UserName, LoweredUserName, MobileAlias, IsAnonymous, LastActivityDate)
values
('97C84F32-26A6-4A6C-960E-89A6A14D54E4','C2CADEDE-DA70-4C25-B717-6970344C8B34','John_doe','','',1,'2014-11-05 21:28:33.043')

Insert into Users
(ApplicationId, UserId, UserName, LoweredUserName, MobileAlias, IsAnonymous, LastActivityDate)
values
('97C84F32-26A6-4A6C-960E-89A6A14D54E4','D2CADEDE-CA70-4C25-B717-6970344C8B34','John_doe1','','',1,'2014-11-05 21:28:33.043')

更新

经过一番研究,aspnet_Users 表默认在UserId 和LoweredUserName 上有一个唯一索引。只需指定一个唯一的 LoweredUserName 值:

Insert into Users
(ApplicationId, UserId, UserName, LoweredUserName, MobileAlias, IsAnonymous, LastActivityDate)
values
('97C84F32-26A6-4A6C-960E-89A6A14D54E4','C2CADEDE-DA70-4C25-B717-6970344C8B34','John_doe','john doe','',1,'2014-11-05 21:28:33.043')

Insert into Users
(ApplicationId, UserId, UserName, LoweredUserName, MobileAlias, IsAnonymous, LastActivityDate)
values
('97C84F32-26A6-4A6C-960E-89A6A14D54E4','D2CADEDE-CA70-4C25-B717-6970344C8B34','John_doe1','john_doe1','',1,'2014-11-05 21:28:33.043')

【讨论】:

  • 我想用不同的 UserId 插入相同的 applicationId
  • 不,它仍然不允许我在 ApplicationId 列中添加相同的值
  • 那么你的桌子上有另一个索引,你没有向我们展示。其实这个索引叫做aspnet_Users_Index。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 2010-10-23
  • 2015-11-23
  • 2020-03-08
  • 2011-03-26
相关资源
最近更新 更多