2013-04-05 51 views
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,也许这是我的问题!

+0

用'ALTER COLUMN'替换'MODIFY' – 2013-04-05 08:30:26

回答

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约束保证了唯一的数据,因此它们经常在标识列上定义。

+0

谢谢,marc_s!它的工作,我不知道我不得不把修改而不是修改。我知道我的PK不应该接受null,这就是为什么我想将它设置为NOT NULL。无论如何您都无法将主键置于空列,您将收到错误。谢谢你的答案,它的工作:) – darkdante 2013-04-05 08:44:05

相关问题