总结: SQLserver想要修改主键的数据类型
如果有外键 那么删除主键与外键的约束
修改主键的数据类型 添加此表主键约束 如果外键也是另一个表的主键 那么继续删除此表主键的约束 修改此column的数据类型 添加此表主键约束 添加外键约束
if(A.column = A.primarykey){
if(A.column = B.foreignkey)
{
drop constraint A.primarykey
drop constraint B.foreignkey
alter A.column
add constraint A.primarykey
if(A.column = B.primarykey){
drop constraint B.primarykey
alter B.column
add constraint B.primarykey
add constraint B.foreignkey
}
}
else{
drop constraint A.primarykey
alter A.column
add constraint A.primarykey
}
}
查看表的外键约束代码
SELECT name
FROM sys.foreign_key_columns f
JOIN sys.objects o
ON f.constraint_object_id = o.object_id
WHERE f.parent_object_id = OBJECT_ID('表名');
例子:
将主键Sno的类型改为char(11)
先删除外键 再修改主键类型 然后添加外键
alter table Student
drop constraint PK_Student //这个是主键约束
alter table SC
drop constraint FK__SC__Sno__3F466844 //这个是外键约束 在另一个表SC 中
FK__SC__Sno__3F466844经过查询外键已经被删除
接下来修改主键数据类型
主键类型修改成功, 但是现在已经不是主键了,所以接下来添加主键约束
测试一下结果在有主键约束的条件下也不能修改主键类型 好麻烦啊 (纯测试用)
所以接下来修改外键类型时 因为外键在SC表中也是主键 所以同样主外键约束都要删除 然后修改再添加
删除SC的主键约束 然后修改类型 添加类型
修改主键类型
添加主键约束
然后添加外键约束
成功!