将主键Sno的类型改为char(11)

 数据库更改主键的类型 随笔 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

数据库更改主键的类型 随笔 第2张

数据库更改主键的类型 随笔 第3张

 

 

先删除外键 再修改主键类型 然后添加外键

alter table Student

drop constraint PK_Student       //这个是主键约束

alter table SC

drop constraint FK__SC__Sno__3F466844   //这个是外键约束  在另一个表SC 中

 数据库更改主键的类型 随笔 第4张

FK__SC__Sno__3F466844经过查询外键已经被删除

接下来修改主键数据类型 

 数据库更改主键的类型 随笔 第5张

 数据库更改主键的类型 随笔 第6张

主键类型修改成功, 但是现在已经不是主键了,所以接下来添加主键约束

 数据库更改主键的类型 随笔 第7张

数据库更改主键的类型 随笔 第8张

 

 

 

 

测试一下结果在有主键约束的条件下也不能修改主键类型  好麻烦啊  (纯测试用) 

 数据库更改主键的类型 随笔 第9张

数据库更改主键的类型 随笔 第10张

所以接下来修改外键类型时 因为外键在SC表中也是主键 所以同样主外键约束都要删除 然后修改再添加

删除SC的主键约束 然后修改类型 添加类型

 数据库更改主键的类型 随笔 第11张

修改主键类型

 数据库更改主键的类型 随笔 第12张

添加主键约束

 数据库更改主键的类型 随笔 第13张

数据库更改主键的类型 随笔 第14张

 

然后添加外键约束

 数据库更改主键的类型 随笔 第15张

成功!

 

总结: 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('表名');

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄