如何移除复合主键中的一列且保留主键约束?
解决方法
要移除复合主键中的某一列并保留主键约束,你需要先删除原主键约束,移除目标列后,再基于剩余的列重新创建主键约束。具体步骤如下:
获取当前主键约束名称(避免硬编码约束名,适配不同环境)
使用更精准的系统视图查询主键约束:DECLARE @ConstraintName NVARCHAR(MAX); SELECT @ConstraintName = name FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('PrimaryDeneme1');删除原主键约束
ALTER TABLE PrimaryDeneme1 DROP CONSTRAINT @ConstraintName;移除目标列
ALTER TABLE PrimaryDeneme1 DROP COLUMN SomeColumn1;基于剩余列重新创建主键约束
假设原复合主键的另外两列是SomeColumn2和SomeColumn3,执行以下语句重建主键:ALTER TABLE PrimaryDeneme1 ADD CONSTRAINT PK_PrimaryDeneme1 PRIMARY KEY (SomeColumn2, SomeColumn3);
完整示例代码
-- 获取主键约束名 DECLARE @ConstraintName NVARCHAR(MAX); SELECT @ConstraintName = name FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('PrimaryDeneme1'); -- 删除原主键 ALTER TABLE PrimaryDeneme1 DROP CONSTRAINT @ConstraintName; -- 删除目标列 ALTER TABLE PrimaryDeneme1 DROP COLUMN SomeColumn1; -- 重建主键(替换为你的剩余主键列) ALTER TABLE PrimaryDeneme1 ADD CONSTRAINT PK_PrimaryDeneme1 PRIMARY KEY (SomeColumn2, SomeColumn3);
注意:替换代码中的
SomeColumn2和SomeColumn3为实际保留的主键列名,约束名PK_PrimaryDeneme1可根据需要修改。
内容的提问来源于stack exchange,提问作者Ahmet
相关产品推荐
相关产品推荐

