2
我有一堆使用PK列的用戶定義數據類型的表。是否有可能改變這種類型使用SQL Server 2005?是否可以更改SQL用戶定義的數據類型?
我有一堆使用PK列的用戶定義數據類型的表。是否有可能改變這種類型使用SQL Server 2005?是否可以更改SQL用戶定義的數據類型?
我建議總是可以重構糟糕的或過時的數據庫設計,它只是取決於你願意去做多少工作。
如果您正在尋找用代理鍵替換用戶定義的數據,那麼您應該能夠簡單地改變現有表以包含非空的標識列,這應該會導致分配所有現有記錄一個新的密鑰自動。
一旦新字段填充了唯一的ID,如果您需要移出並將外鍵引用替換爲此表,那麼我只需更改這些表以包含新字段並使用類似如下內容:
UPDATE child_table
SET new_fk_val =
SELECT new_pk_val
FROM parent_table
WHERE parent_table.old_pk_val = child_table.old_fk_val
該步驟完成後,您可以刪除舊的外鍵約束,刪除舊的外鍵列,刪除舊的主鍵列,建立新的主鍵約束,然後建立新的外鍵約束。
當然,如果舊版本的父和子表的關係就是這樣,你必須在子表無效的記錄,你可能需要做類似如下:
DELETE FROM child_table
WHERE old_fk_val NOT IN
(SELECT old_pk_val FROM parent_table)