基本語法
sp_rename
[ @objname = ] 'object_name' , -- 格式: schema.table.column 或 table.column
[ @newname = ] 'new_name' , -- 僅新欄位名稱,不要加前綴
[ @objtype = ] 'COLUMN' -- 明確指定為欄位
執行範例
USE Test;
-- 方法 1: 直接執行
sp_rename 'd_s_t.avg_grade', 'avg_g', 'COLUMN';
-- 方法 2: 使用 EXEC (結果相同)
EXEC sp_rename 'd_s_t.avg_grade', 'avg_g', 'COLUMN';
關鍵注意事項
| 項目 | 正確做法 | 錯誤做法 |
| @newname 格式 | 'avg_g' (單純名稱) | 'd_s_t.avg_g' (會建立名為 "d_s_t.avg_g" 的欄位) |
| @objname 格式 | 'schema.table.column' 或 'table.column' | 僅 'column' (不明確) |
| 執行後警告 | 「注意: 變更物件名稱的任何部分都可能會破壞指令碼和預存程序」 → 正常提醒,無需理會 | 以為失敗而中止 |
完整參數說明
| 參數 | 資料型別 | 預設值 | 說明 |
| @objname | nvarchar(776) | 無 | 目前物件名稱。欄位格式: table.column 或 schema.table.column |
| @newname | sysname | 無 | 新名稱,單一識別碼,遵循命名規則 |
| @objtype | varchar(13) | NULL | 物件類型: COLUMN, DATABASE, INDEX, OBJECT, USERDATATYPE |
回傳碼
批量重命名腳本範例
-- 將所有表的 CreateDate 重命名為 CreatedAt
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += 'EXEC sp_rename ''' +
QUOTENAME(SCHEMA_NAME(o.schema_id)) + '.' + QUOTENAME(o.name) + '.CreateDate'', ''CreatedAt'', ''COLUMN'';' + CHAR(13)
FROM sys.objects o
JOIN sys.columns c ON o.object_id = c.object_id
WHERE o.type = 'U' AND c.name = 'CreateDate';
PRINT @sql;
-- EXEC sp_executesql @sql; -- 確認後執行
相依物件檢查 (重命名前必做)
-- 查詢引用此欄位的檢視、預存程序、函數、觸發器
SELECT DISTINCT
o.name AS ObjectName,
o.type_desc AS ObjectType,
m.definition
FROM sys.sql_modules m
JOIN sys.objects o ON m.object_id = o.object_id
WHERE m.definition LIKE '%avg_grade%' -- 舊欄位名
AND o.type IN ('V','P','FN','IF','TF','TR');