数据库更改主键的类型-主键存在外键

总结: 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的主键约束 然后修改类型 添加类型

 

修改主键类型

 

添加主键约束

 

 

然后添加外键约束

 

成功!

 

 

 

posted @ 2019-04-20 12:39  征包  阅读(4308)  评论(0编辑  收藏  举报