sp_rename (Transact-SQL)

變更目前資料庫中之使用者建立物件的名稱。這個物件可以是資料表、索引、資料行、別名資料類型或 Microsoft .NET Framework Common Language Runtime (CLR) 使用者自訂類型。

警告注意事項注意

變更物件名稱的任何部分,可能破壞指令碼和預存程序。我們建議您不要使用陳述式來重新命名預存程序、觸發程序、使用者定義函數或檢視;相反地,請卸除物件,再利用新名稱來重新建立它。

主題連結圖示Transact-SQL 語法慣例

語法

sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' 
    [ , [ @objtype = ] 'object_type' ] 

引數

  • [ @objname = ] 'object_name'
    這是使用者物件或資料類型目前的完整或非完整名稱。若要重新命名的物件是資料表中的資料行,object_name 的格式必須是 table.column 或 schema.table.column。若要重新命名的物件是索引,object_name 的格式必須是 table.index 或 schema.table.index。

    只有在指定限定物件時,才需要引號。如果提供其中包括資料庫名稱的完整名稱,資料庫名稱就必須是目前資料庫的名稱。object_name 是 nvarchar(776),沒有預設值。

  • [ @newname = ] 'new_name'
    這是指定物件的新名稱。new_name 必須是單部分的名稱,且必須遵照識別碼的規則。newname 是 sysname,沒有預設值。

    [!附註]

    觸發程序名稱的開頭不能是 # 或 ##。

  • [ @objtype = ] 'object_type'
    這是要重新命名的物件類型。object_type 是 varchar(13),預設值是 NULL,它可以是下列值之一。

    描述

    COLUMN

    要重新命名的資料行。

    DATABASE

    使用者定義資料庫。當重新命名資料庫時,需要這個物件類型。

    INDEX

    使用者自訂索引。

    OBJECT

    sys.objects 中的追蹤類型項目。例如,您可以利用 OBJECT 來重新命名物件,其中包括條件約束 (CHECK、FOREIGN KEY、PRIMARY/UNIQUE KEY)、使用者資料表和規則。

    USERDATATYPE

    執行 CREATE TYPEsp_addtype 來加入的別名資料類型CLR 使用者定義型別

傳回碼值

0 (成功) 或非零值 (失敗)

備註

您只能變更目前資料庫中的物件或資料類型的名稱。您無法改變大部分系統資料類型和系統物件的名稱。

每當重新命名 PRIMARY KEY 或 UNIQUE 條件約束時,sp_rename 都會自動重新命名相關聯的索引。如果是重新命名的索引繫結於 PRIMARY KEY 條件約束,sp_rename 也會自動重新命名 PRIMARY KEY 條件約束。

您可以利用 sp_rename 來重新命名主要和次要 XML 索引。

重新命名預存程序、函數、檢視或觸發程序,不會變更 sys.sql_modules 目錄檢視 definition 資料行中對應的物件名稱。因此,我們建議您不要利用 sp_rename 來重新命名這些物件類型。相反地,請卸除物件,再利用它的新名稱來重新建立物件。

重新命名資料表或資料行之類的物件,不會自動重新命名指向這個物件的參考。您必須手動修改任何參考重新命名之物件的物件。例如,如果您重新命名資料表資料行,且有觸發程序參考這個資料行,您必須修改觸發程序來反映新的資料行名稱。在重新命名物件之前,請利用 sys.sql_expression_dependencies 來列出其相依性。

權限

若要重新命名物件、資料行和索引,需要物件的 ALTER 權限。若要重新命名使用者類型,需要這個類型的 CONTROL 權限。若要重新命名資料庫,需要系統管理員 (sysadmin) 或資料庫建立者 (dbcreator) 固定伺服器角色中的成員資格。

範例

A. 重新命名資料表

下列範例會將 SalesTerritory 資料表重新命名為 Sales 結構描述中的 SalesTerr。

USE AdventureWorks2008R2;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO

B. 重新命名資料行

下列範例會將 SalesTerritory 資料表中的 TerritoryID 資料行重新命名成 TerrID。

USE AdventureWorks2008R2;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

C. 重新命名索引

下列範例會將 IX_ProductVendor_VendorID 索引重新命名成 IX_VendorID。

USE AdventureWorks2008R2;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO

D. 重新命名別名資料類型

下列範例會將 Phone 別名資料類型重新命名成 Telephone。

USE AdventureWorks2008R2;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO