0

我有一张表,其中有一些数据。

我在一列上有一个主键,但我想将它更改为我最近添加的另一列。我将该列添加为可为空的,我对其进行了更新以使其不为空。

我用了

ALTER TABLE MyTable MODIFY Termdefid INT NOT NULL

但我收到错误

“修改”附近的语法不正确。

之后我想这样做(当然,在我放弃当前的 PK 之后):

ALTER TABLE [dbo].[MyTable] ADD  CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED 
(
    [TermdefID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
GO

我无法制作我的新专栏NOT NULL。这是我的问题。我怎样才能做到这一点?

我使用 SQL Server 2005,也许这是我的问题!

4

1 回答 1

2

在 SQL Server 中,主键列不能为空

另外:您的ALTER TABLE命令对 SQL Server 无效 - 它应该是:

ALTER TABLE MyTable 
ALTER COLUMN Termdefid INT NOT NULL

但同样:如果该列是您的主键的一部分,则它不能为 nullable

请参阅有关主键约束的相关MSDN 文档:

一张表只能有一个 PRIMARY KEY 约束,参与 PRIMARY KEY 约束的列不能接受空值。因为 PRIMARY KEY 约束保证数据的唯一性,所以它们经常在标识列上定义。

于 2013-04-05T08:31:45.037 回答