客戶舊版資料庫已上線且含生產資料,新版本需修改結構(新增表、欄位、修改型別、存儲過程等),需開發工具自動將舊庫升級為新結構並保留資料。
INSERT SELECT 將舊資料導入新表。缺點:大量資料遷移耗時長,客戶端操作複雜。
EXEC sp_rename 'OldTable', 'OldTable_Bak'INSERT INTO NewTable(col1,col2...) SELECT col1,col2... FROM OldTable_Bak-- 重命名資料庫 EXEC sp_renamedb 'OldDB', 'NewDB' -- 重命名表/欄位 EXEC sp_rename 'OldTable', 'NewTable' EXEC sp_rename 'Table.OldCol', 'NewCol', 'COLUMN' -- 複製結構 CREATE TABLE NewTable SELECT * FROM OldTable WHERE 1=2 -- 複製資料 INSERT INTO NewTable SELECT * FROM OldTable -- 刪除約束 ALTER TABLE T DROP CONSTRAINT PK_Col -- 刪除程序 DROP PROCEDURE dbo.ProcName
SELECT column_name, data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'T'ALTER TABLE T ALTER COLUMN Col NewType NOT NULLALTER TABLE T ADD Col NewType NOT NULLALTER TABLE T DROP COLUMN Col\n 分隔。CREATE TABLE、ALTER TABLE、CREATE PROCEDURE 區塊。| 維度 | 方案一 | 方案二 | 方案三 |
|---|---|---|---|
| 實作難度 | 低 | 中 | 高 |
| 停機時間 | 最長 | 中等 | 最短 |
| 資料風險 | 低(全新表) | 中(搬移) | 低(就地) |
| 適用場景 | 資料量小、可接受長停機 | 中等資料量、需保留舊表備份 | 大資料量、極短停機窗口、自動化部署 |
本專案最終採用方案三核心邏輯,搭配方案二的約束/程序重建機制,開發出自動化升級工具,已成功應用於多位客戶現場升級。