Share via


sp_rename (Transact-SQL)

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

警告

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

適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。

主題連結圖示 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 的格式必須是 schema.constraint。

    只有在指定限定物件時,才需要引號。 如果提供其中包括資料庫名稱的完整名稱,資料庫名稱就必須是目前資料庫的名稱。 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)、使用者資料表和規則。

    STATISTICS

    使用者明確建立的統計資料,或使用索引隱含建立的統計資料。 重新命名索引的統計資料時,也會自動重新命名索引。

    適用於:SQL Server 2012 至 SQL Server 2014 以及 Windows Azure SQL 資料庫。

    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 AdventureWorks2012;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO

B.重新命名資料行

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

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

C.重新命名索引

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

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

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

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

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

E.重新命名條件約束

下列範例會重新命名 PRIMARY KEY 條件約束、CHECK 條件約束和 FOREIGN KEY 條件約束。 重新命名條件約束時,您必須指定條件約束所屬的結構描述。

USE AdventureWorks2012; 
GO
-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee')) 
AND type IN ('C','F', 'PK'); 
GO

-- Rename the primary key constraint.
sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO

-- Rename a check constraint.
sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';
GO

-- Rename a foreign key constraint.
sp_rename 'HumanResources.FK_Employee_Person_BusinessEntityID', 'FK_EmployeeID';

-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee')) 
AND type IN ('C','F', 'PK'); 

name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_Person_BusinessEntityID   HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_BusinessEntityID          HumanResources     PRIMARY_KEY_CONSTRAINT
CK_Employee_BirthDate                 HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_ID                        HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_ID                        HumanResources     PRIMARY_KEY_CONSTRAINT
CK_BirthDate                          HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

F.重新命名統計資料

下列範例會建立名為 contactMail1 的統計資料物件,然後使用 sp_rename 將統計資料重新命名為 NewContact。 當重新命名統計資料時,必須以 schema.table.statistics_name 格式指定物件。

適用於:SQL Server (SQL Server 2012 至 SQL Server 2014、Windows Azure SQL 資料庫)。

CREATE STATISTICS ContactMail1
    ON Person.Person (BusinessEntityID, EmailPromotion)
    WITH SAMPLE 5 PERCENT;

sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';

請參閱

參考

sys.sql_expression_dependencies (Transact-SQL)

sys.sql_modules (Transact-SQL)

系統預存程序 (Transact-SQL)

Database Engine 預存程序 (Transact-SQL)