Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法在表中的可空列上定义主键约束_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 无法在表中的可空列上定义主键约束

Sql 无法在表中的可空列上定义主键约束,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我最终创建了一个表employee,其中包含一列empid,该列是一个计算列,该列也是主键 它是一个自引用表,列managerid引用回自身 但是现在,当我在添加更多列后保存表时,我得到了一个错误 “注册”表 无法创建索引“PK\U注册”。 无法在表“注册”中的可空列上定义主键约束。 无法创建约束。请参阅前面的错误 但是我的桌子工作得很好 我希望以图形方式在表中工作,而不是每次进行更改时都进行编码 我不能用图形的方式来做这件事,因为这个错误有100个表格,我不喜欢这样做,编码很烦人 我想在SQL

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

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

但是现在,当我在添加更多列后保存表时,我得到了一个错误

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

但是我的桌子工作得很好

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

我不能用图形的方式来做这件事,因为这个错误有100个表格,我不喜欢这样做,编码很烦人

我想在SQLServer2008ManagementStudio中以图形方式进行此操作,是否可能

这是我的桌子

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

您不能将empid用作主键。
使用id作为主键。
使用“[int]IDENTITY”作为表的主键是执行主键的最常用方法。 主键和聚集索引将控制存储。
我看不出使用empid作为主键有什么好处。

只需将empid设置为计算列。对于查询,SQLServer将看到它是计算列,并且只使用主键。SQL server将在其查询中仅使用主键。

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