无法在表中的可空列上定义PRIMARY KEY约束

时间:2013-03-21 11:34:39

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

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

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

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

  

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

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

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

我不能在图形上做到这个错误的原因有100个表我不喜欢这样编码它很刺激

我想在SQL Server 2008中以图形方式实现管理工作室是否可能?

这是我的表

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

1 个答案:

答案 0 :(得分:1)

你不能使用empid作为主键 使用id作为主键 使用“[int] IDENTITY”作为表的主键是最常用的主键操作方式。 主键和聚簇索引将控制存储 使用empid作为主键,我看不出任何好处 只需将empid设为计算列即可。对于查询,SQL服务器将看到它是计算列,它只使用主键。然后,SQL服务器将仅在其查询中使用主键。