分享方式:


sp_rename (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Microsoft Fabric 中的 SQL 分析端點 Microsoft Fabric 中的倉儲

變更目前資料庫中使用者建立的物件名稱。 此物件可以是數據表、索引、數據行、別名數據類型或Microsoft

.NET Framework Common Language Runtime (CLR) 使用者定義型別。

重要

Azure Synapse Analytics 中的無伺服器 SQL 集區不支援某些系統物件和 Transact-SQL 語法,包括本文。 如需詳細資訊,請造訪 T-SQL 支援

警告

變更物件名稱的任何部分,可能破壞指令碼和預存程序。 我們建議您不要使用此語句來重新命名預存程式、觸發程式、使用者定義函式或檢視;請改為卸除 物件,然後以新的名稱重新建立它。

Transact-SQL 語法慣例

Syntax

sp_rename SQL Server 和 Azure SQL 資料庫 中的語法:

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

sp_rename Azure Synapse Analytics 中的語法(預覽版):

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

sp_rename Microsoft Fabric 中的語法:

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

引數

[ @objname = ] 'object_name'

用戶物件或數據類型的目前限定或非限定名稱。 如果要重新命名的對像是數據表中的數據行,object_name必須是 form table.columnschema.table.column。 如果要重新命名的對像是索引,object_name必須是 form table.indexschema.table.index。 如果要重新命名的對像是條件約束,object_name格式必須是schema.constraint

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

[ @newname = ] 'new_name'

指定之物件的新名稱。 new_name必須是一部分的名稱,而且必須遵循標識符的規則。 newname 為 sysname,沒有預設值。

觸發程式名稱不能以 # 或 ## 開頭。

適用於 Microsoft Fabric 中的倉儲:

  • 架構名稱不能包含 /\ 結尾 .
  • 數據表名稱不能包含 /\ 結尾 .

[ @objtype = ] 'object_type'

要重新命名的物件類型。 object_type為 varchar(13),預設值NULL為 ,而且可以是下列其中一個值。

Description
COLUMN 要重新命名的數據行。
DATABASE 使用者定義的資料庫。 重新命名資料庫時,需要此物件類型。
INDEX 用戶定義的索引。 使用統計數據重新命名索引,也會自動重新命名統計數據。
OBJECT 在 sys.objects追蹤之類型的專案。 例如,OBJECT 可用來重新命名物件,包括條件約束(CHECK、FOREIGN KEY、PRIMARY/UNIQUE KEY)、用戶數據表和規則。
STATISTICS 適用於:SQL Server 2012 (11.x) 和更新版本,以及 Azure SQL Database。

用戶明確建立或以索引隱含建立的統計數據。 重新命名索引的統計數據也會自動重新命名索引。
USERDATATYPE 執行 CREATE TYPE 或 sp_addtype所新增的 CLR 使用者定義型別。

適用於:Azure Synapse Analytics

  • sp_rename Azure Synapse Analytics 的 [預覽] 中,是一個強制值, COLUMN 指定要重新命名的物件類型是數據行,而且必須一律包含在 語句中 sp_rename 。 只有在數據行不是散發數據行時,才能重新命名數據行。 sp_rename 只能用來在使用者物件中重新命名 COLUMN

適用於:Microsoft Fabric

  • in sp_rename for the Warehouse in Microsoft Fabric, OBJECT is only supported value for @objtype.
  • 針對 sp_rename Microsoft Fabric 中的 SQL 分析端點,OBJECT是唯一支援@objtype的值。 無法重新命名數據表。

傳回碼值

0 (成功) 或非零數位 (失敗)。

備註

適用於 SQL Server(所有支援的版本)和 Azure SQL 資料庫:

  • sp_rename 每當重新命名 PRIMARY KEY 或 UNIQUE 條件約束時,會自動重新命名相關聯的索引。 如果重新命名的索引系結至 PRIMARY KEY 條件約束,PRIMARY KEY 條件約束也會由 sp_rename自動重新命名。

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

  • 在 sys.sql_modules 目錄檢視的定義數據行中,重新命名預存程式、函式、檢視或觸發程式不會變更對應物件的名稱,也不會使用OBJECT_DEFINITION內建函式取得。 因此,我們建議您 sp_rename 不要用來重新命名這些物件類型。 相反地,請卸除物件,再使用其新名稱來重新建立物件。

適用於 SQL Server(所有支援的版本)、Azure SQL 資料庫 和 Azure Synapse Analytics:

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

  • 重新命名資料行不會自動更新任何從該資料表 SELECT 所有資料行 (使用 *) 之物件的中繼資料。 例如,如果您重新命名資料表資料行,而且該資料行是由非結構描述繫結檢視或函式所參考並 SELECT 所有資料行 (使用 *),則該檢視或函數的中繼資料會繼續反映原始資料行名稱。 使用 sp_refreshsqlmodulesp_refreshview 重新整理中繼資料。

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

  • 如果您針對新名稱使用超過 128 個字元,則只會使用前 128 個字元,其餘字元會被截斷。

適用於 Azure Synapse Analytics:

  • 在 Azure Synapse Analytics 中, sp_rename 適用於專用 SQL 集區處於 預覽 狀態。

權限

若要重新命名對象、數據行和索引,需要物件的 ALTER 許可權。 若要重新命名使用者類型,需要類型的CONTROL許可權。 若要重新命名資料庫,需要系統管理員dbcreator 固定伺服器角色中的成員資格。 若要重新命名總賬數據表,則需要 ALTER LEDGER 許可權。

範例

A. 重新命名資料表

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

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

B. 重新命名資料行

下列範例會將 TerritoryID 資料表中的數據 SalesTerritory 列重新命名為 TerrID

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

C. 重新命名索引

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

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

D. 重新命名別名數據類型

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

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

E. 重新命名條件約束

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

USE AdventureWorks2022;
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.
EXEC sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO

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

-- Rename a foreign key constraint.
EXEC 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');
GO
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 的統計資料物件,然後使用 將統計數據重新命名為 NewContact sp_rename。 當您重新命名統計數據時,必須以 『schema.table.statistics_name』 格式指定物件。

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

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

範例:Azure Synapse Analytics

G. 重新命名資料行

下列範例會將 c1 資料表中的數據 table1 列重新命名為 col1

注意

此 Azure Synapse Analytics 功能仍處於專用 SQL 集區的預覽狀態,目前僅適用於架構中的 dbo 物件。

CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO

H. 重新命名物件

下列範例會使用 OBJECT 類型,將資料表dbo.table1重新命名為 dbo.table2

EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';