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

修改主鍵類型

添加主鍵約束


然后添加外鍵約束

成功!
