【问题标题】:SQL UniqueIdentifierSQL 唯一标识符
【发布时间】:2014-05-14 01:50:01
【问题描述】:

我有一个名为UserCredentials 的表,它有一个uniqueidentifier[UserCredentialId]。当我尝试创建一个新用户时,我第一次尝试得到00000000-0000-0000-0000-000000000000,然后当我尝试添加另一个用户时,它说 PK 不能被复制。起初我很难猜测它是什么意思,但我认为这是因为我的uniqueidentifier 没有生成随机 ID。

怎么办?

编辑

这是我的 SQL 表结构:

CREATE TABLE [dbo].[UserCredential](
    [UserCredentialId] [uniqueidentifier] NOT NULL,
    [UserRoleId] [int] NOT NULL,
    [Username] [varchar](25) NOT NULL,
    [Password] [varchar](50) NOT NULL,
    [PasswordSalt] [varchar](max) NOT NULL,
    [FirstName] [varchar](50) NOT NULL,
    [LastName] [varchar](50) NOT NULL,
    [PayorCode] [varchar](20) NOT NULL,
    [ProviderCode] [varchar](50) NULL,
    [CorporationCode] [varchar](50) NULL,
    [Department] [varchar](50) NULL,
    [Status] [varchar](1) NOT NULL,
    [DateCreated] [datetime] NOT NULL,
    [DateActivated] [datetime] NULL,
    [Deactivated] [datetime] NULL,
    [DateUpdated] [datetime] NULL,
    [CreatedBy] [varchar](50) NOT NULL,
    [UpdatedBy] [varchar](50) NOT NULL,
    [EmailAddress] [varchar](50) NULL,
    [ContactNumber] [int] NULL,
    [Picture] [varbinary](max) NULL,
 CONSTRAINT [PK_UserCredential_1] PRIMARY KEY CLUSTERED 
(
    [UserCredentialId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

我已将其设置为 (newid()) 但仍然无法正常工作。

【问题讨论】:

  • 你能发布你的SQL表脚本吗?我的意思是创建一个。
  • newid() 设置了什么?
  • 只是简单的 newid()。仅此而已。
  • 我认为他将字段的字段属性列表中的DefaultValueForBinding设置为NEWID()。

标签: sql sql-server entity-framework tsql uniqueidentifier


【解决方案1】:

将用户实例的 ID 设置为 Guid.NewGuid();

user.Id = Guid.NewGuid();

【讨论】:

  • 我会建议相同的答案。 Guid.NewGuid();
【解决方案2】:

将表定义更改为

[UserCredentialId] UNIQUEIDENTIFIER DEFAULT (NEWSEQUENTIALID()) NOT NULL

检查为什么更喜欢 NEWSEQUENTIALID 而不是 http://technet.microsoft.com/en-us/library/ms189786.aspx 的 newid。

当 GUID 列用作行标识符时,使用 NEWSEQUENTIALID 可以比使用 NEWID 函数更快。这是因为 NEWID 函数会导致随机活动并使用较少的缓存数据页。使用 NEWSEQUENTIALID 还有助于完全填充数据和索引页。

【讨论】:

    【解决方案3】:

    您可以在插入期间将表中的所有值默认为一个新值,就像 IDENTITY 一样。

    运行此命令将所有插入的默认设置为使用 newid()。

    ALTER TABLE [dbo].[UserCredential] ADD  CONSTRAINT [DF_UserCredential_UserCredentialID]  DEFAULT (newid()) FOR [UserCredentialId]
    GO
    

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多