sp_rename (Transact-SQL)
變更目前資料庫中之使用者建立物件的名稱。 這個物件可以是資料表、索引、資料行、別名資料類型或 Microsoft .NET Framework Common Language Runtime (CLR) 使用者自訂類型。
警告
變更物件名稱的任何部分,可能破壞指令碼和預存程序。我們建議您不要使用陳述式來重新命名預存程序、觸發程序、使用者定義函數或檢視;相反地,請卸除物件,再利用新名稱來重新建立它。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure 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 TYPE 或 sp_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)