【问题标题】:Cannot define PRIMARY KEY constraint on nullable column in table无法对表中的可为空列定义 PRIMARY KEY 约束
【发布时间】:2013-03-21 11:34:39
【问题描述】:

我终于创建了一个表employee,其中包含一个列empid,它是一个计算列,该列也是主键。

这是一个自引用表,managerid 列引用回自身。

但是现在当我在添加更多列后保存表格时,出现错误

“注册”表
无法创建索引“PK_Registration”。
无法对表“注册”中的可为空列定义 PRIMARY KEY 约束。
无法创建约束。查看以前的错误。

但我的桌子工作得很好......

我想在表格中以图形方式工作,而不是每次进行更改时都编码

我不能以图形方式执行此错误的原因有 100 个表我不喜欢这样做编码它非常烦人

我想在 SQL Server 2008 Management Studio 中以图形方式进行,可以吗?

这是我的桌子

CREATE TABLE [dbo].[Registration](
    [empid]  AS ('Sale_'+CONVERT([varchar](50),[id],(0))) PERSISTED NOT NULL,
    [id] [int] IDENTITY(900000,1) NOT NULL,
    [First_Name] [varchar](40) NULL,
    [Last_Name] [varchar](40) NULL,
    [Address] [varchar](40) NULL,
    [E_Mail] [varchar](40) NULL,
    [Country] [varchar](40) NULL,
    [Mobile_No] [varchar](40) NULL,
    [Designation] [varchar](40) NULL,
    [managerID] [varchar](55) NULL,
 CONSTRAINT [PK_Registration] PRIMARY KEY CLUSTERED 
(
    [empid] 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

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Registration]  WITH CHECK ADD  CONSTRAINT [FK_Registration_Registration] FOREIGN KEY([managerID])
REFERENCES [dbo].[Registration] ([empid])
GO

ALTER TABLE [dbo].[Registration] CHECK CONSTRAINT [FK_Registration_Registration]
GO

【问题讨论】:

  • 无法真正重现您的问题,我可以毫无问题地运行您的脚本(如您所说),然后尝试在 SQL Management Studio 中添加另一列(通过单击不按脚本)但我没有得到你提到的错误,也许你还有一些你没有写的步骤?
  • 感谢回复 open table in Designer in sql 并编辑数据类型长度手机号码 40 到 41 看看报错
  • 我做到了。我在设计器中打开了表格并添加了一个新列。我可以查询它,没有错误。执行你的这个脚本后你的步骤具体是什么?
  • 使用设计器是一个可怕的想法(当您进行更改并且表有数据时,它会删除并重新创建表,这是一个真正的性能问题)。所有数据库代码都是代码,应该编写脚本并放入源代码控制中。如果你不喜欢写sql,那太糟糕了。

标签: sql sql-server sql-server-2008


【解决方案1】:

您不能使用 empid 作为主键。
使用 id 作为主键。
无论如何,使用“[int] IDENTITY”作为表的主键是最常用的主键方式。 主键和聚集索引将控制存储。
我看不出使用 empid 作为主键有什么好处。
只需将 empid 设为计算列。对于查询,SQL Server 将看到它是计算列并且它只使用主键。然后 SQL 服务器将在其查询中仅使用主键。

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多