Sql server SQL Server 8111-但列不可为空

Sql server SQL Server 8111-但列不可为空,sql-server,primary-key,Sql Server,Primary Key,我想向包含数据的现有表上的现有列添加主键约束。该列不可为空 然而,当我打电话时 alter table mytable add primary key (mycolumn) 我有一个8111: Msg 8111,级别16,状态1,第2行无法定义主键 表“mytable”中可为null的列上的约束 即使我连续调用两个指令: alter table mytable alter column mycolumn INT NOT NULL; alter table mytable add primary

我想向包含数据的现有表上的现有列添加主键约束。该列不可为空

然而,当我打电话时

alter table mytable add primary key (mycolumn)
我有一个8111:

Msg 8111,级别16,状态1,第2行无法定义主键 表“mytable”中可为null的列上的约束

即使我连续调用两个指令:

alter table mytable alter column mycolumn INT NOT NULL;
alter table mytable add primary key (mycolumn)
我还有8111 -SQLServerManagementStudio中的列描述确认mycolumn设置为NOTNULL


我可以怎么做?

您需要将批次分开。最好也包括模式名

alter table dbo.mytable alter column mycolumn INT NOT NULL;
go
alter table dbo.mytable add primary key (mycolumn);

rextester演示:

尝试将
GO
放在两个命令之间或分别运行它们。这是一个解析问题,而不是操作顺序。在尝试添加新列之前,表已存在,并且已经存在数据。PK的数据应该是什么?是否希望它成为标识列?指定身份(1,1)和解决问题的身份。如果没有,那么我想您可能需要一个暂存表。@WEI_DBA不,该列已经存在。@AaronBertrand。误入歧途。我以为他在尝试添加新列。你能提供一个复制程序让我们测试吗,我是说你的表定义正如我所说的,第二个命令也不能单独工作,mycolumn应该设置为“notnull”。@Ferenjito这可能是架构问题吗?在不同的模式中是否有同名的表?@Ferenjito我无法复制。你必须提供更多的细节。