将主键更改为可为空的列而不会丢失数据

时间:2013-04-05 08:24:31

标签: sql-server-2005 primary-key

我有一张桌子,其中有一些数据。

我在列上有一个主键,但是我想将它更改为我经常添加的另一个列。 我将列添加为可空,我将其更新为能够使其为NOT NULL。

我用过

ALTER TABLE MyTable MODIFY Termdefid INT NOT NULL

但我收到错误

  

'MODIFY'附近的语法不正确。

之后我想这样做(当然我放弃当前的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,也许这是我的问题!

1 个答案:

答案 0 :(得分:2)

在SQL Server中,主键列无法为空

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

ALTER TABLE MyTable 
ALTER COLUMN Termdefid INT NOT NULL

但是又一次:如果该列是主键的一部分,就不能为空

请参阅相关的MSDN documentation on Primary Key Constraints

  

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