數據庫更改主鍵的類型-主鍵存在外鍵


總結: 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的主鍵約束 然后修改類型 添加類型

 

修改主鍵類型

 

添加主鍵約束

 

 

然后添加外鍵約束

 

成功!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM