Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 server SQL Server 8111-但列不可为空_Sql Server_Primary Key - Fatal编程技术网

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我无法复制。你必须提供更多的细节。