如何删除SQL Server中作为主键的列?执行删除操作时出现报错
解决删除主键时提示“'id' is not a constraint”的问题
你遇到的这个报错很常见,核心原因是你直接用列名id去删除约束,但SQL Server里的主键约束是一个独立的数据库对象,它有自己专属的名称(不一定和列名一致)。哪怕你创建主键时没手动指定名称,系统也会自动生成一个类似PK__OLTMS_0B__3213E83FXXXX的随机名称,所以直接写DROP CONSTRAINT id肯定找不到对应的约束。
下面是具体的解决步骤:
1. 先查询出目标表的主键约束名称
执行这条SQL语句来获取主键约束的真实名称:
SELECT name AS 主键约束名称 FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('OLTMS_0B8DF2');
这条语句会从系统视图sys.key_constraints里筛选出目标表的主键约束,返回它的实际名称。
2. 使用真实约束名称执行删除操作
假设第一步查到的主键约束名称是PK__OLTMS_0B__3213E83F1234ABCD,就用这个名称来执行删除:
ALTER TABLE OLTMS_0B8DF2 DROP CONSTRAINT PK__OLTMS_0B__3213E83F1234ABCD; GO
3. (可选)删除id列
如果你最终目的是删除id这个列,在删除主键约束之后,再执行这条语句:
ALTER TABLE OLTMS_0B8DF2 DROP COLUMN id; GO
补充个小知识点:如果当初创建表时是手动指定了主键约束名称(比如CONSTRAINT PK_OLTMS_id PRIMARY KEY (id)),那你可以直接用这个指定的名称去删除,不用查系统视图。但大部分情况下如果没指定,就得靠系统视图来查找真实名称。
内容的提问来源于stack exchange,提问作者krishna mohan
相关产品推荐
相关产品推荐

