首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server sp_rename 修改欄位名稱常見錯誤:參數 @objname 不明確

     編輯:關於SqlServer

錯誤重現

USE Test;
-- 第一次執行:成功
EXEC sp_rename 'd_s_t.avg_grade', 'avg_g', 'COLUMN';

-- 第二次執行:失敗
EXEC sp_rename 'd_s_t.avg_grade', 'avg_g', 'COLUMN';
-- 錯誤:參數 @objname 不明確或所宣告的 @objtype (COLUMN) 有誤

錯誤原因

第一次執行後,欄位已從 avg_grade 重新命名為 avg_g。第二次仍使用舊名稱 d_s_t.avg_grade,該物件已不存在,故報錯「不明確」。

正確做法

-- 第一次:avg_grade → avg_g
EXEC sp_rename 'd_s_t.avg_grade', 'avg_g', 'COLUMN';

-- 若需再次修改:必須使用「目前」名稱
EXEC sp_rename 'd_s_t.avg_g', 'avg_g_new', 'COLUMN';

sp_rename 完整語法與參數

sp_rename 
    [ @objname = ] 'object_name' ,  -- 格式:schema.table.column / table.column
    [ @newname = ] 'new_name' ,     -- 僅新名稱,不要加 schema.table
    [ @objtype = ] 'object_type'    -- COLUMN, INDEX, OBJECT, DATABASE, USERDATATYPE

關鍵注意事項

項目說明
@newname 格式僅單純名稱 (如 avg_g),不要 加 table. 或 schema. 前綴
執行後警告「注意: 變更物件名稱的任何部分都可能會破壞指令碼和預存程序」屬正常提醒
相依物件檢視、預存程序、函數、觸發器中引用舊欄位名稱將失效,需同步修改
權限需求需 ALTER TABLE 權限 (通常為 db_ddladmin 或 db_owner)

批量重命名腳本範例

-- 將所有表的 CreateDate 重命名為 CreatedAt
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += 'EXEC sp_rename ''' + QUOTENAME(SCHEMA_NAME(o.schema_id)) + '.' + QUOTENAME(o.name) + '.CreateDate'', ''CreatedAt'', ''COLUMN'';'
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;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved