核心語法
EXEC sp_rename '資料表名稱.舊欄位名稱', '新欄位名稱', 'COLUMN';
參數說明
| 參數 | 說明 |
@objname | 格式:'Schema.Table.Column' 或 'Table.Column' |
@newname | 新名稱,單一識別碼,不可含點號 |
@objtype | 'COLUMN' (欄位)、'INDEX'、'OBJECT' (資料表/檢視/程序)、'DATABASE'、'USERDATATYPE' |
常見範例
-- 1. 重命名欄位
EXEC sp_rename 'Customers.[Contact Title]', 'Title', 'COLUMN';
-- 2. 重命名資料表
EXEC sp_rename 'Customers', 'Custs'; -- @objtype 預設 OBJECT
-- 3. 重命名索引
EXEC sp_rename 'TableName.IndexName', 'NewIndexName', 'INDEX';
-- 4. 重命名資料庫 (需單人模式)
EXEC sp_rename 'OldDB', 'NewDB', 'DATABASE';
重要限制與副作用
- 預存程序/檢視/觸發器:重命名後不會更新
syscomments 內的定義文字,導致產生腳本時仍顯示舊名。建議刪除重建而非重命名。
- 重命名 PK/UNIQUE 約束會自動同步重命名對應索引。
- 重命名後需清空程序快取 (
DBCC FREEPROCCACHE 或重啟服務) 確保重新編譯。
- 系統物件、系統資料型別不可重命名。
權限需求
- sysadmin、db_owner、db_ddladmin 或物件擁有者。
- 重命名資料庫需 sysadmin + dbcreator。
最佳實務
- 僅對資料表、欄位、索引使用
sp_rename。
- 預存程序、檢視、觸發器:DROP + CREATE。
- 變更後同步更新應用程式碼、ORM 對應、文件。
- 生產環境變更前務必備份、測試。