2

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

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

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

“注册”表
无法创建索引“PK_Registration”。
无法在表“注册”中的可为空列上定义主键约束。
无法创建约束。请参阅以前的错误。

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

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

我无法以图形方式执行此错误的原因有 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
4

1 回答 1

1

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

于 2013-03-21T15:58:04.350 回答