sp_rename (Transact-SQL)

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

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

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

重要

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

警告

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

Transact-SQL 語法慣例

Syntax

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

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

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

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

sp_renameMicrosoft Fabric 中的 語法:

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

引數

[ @objname = ] ' object_name '

使用者物件或資料類型的目前限定或非限定名稱。 如果要重新命名的物件是資料表中的資料行, object_name必須是 form table.column schema.table.column 。 如果要重新命名的物件是索引, object_name必須是 form table.index schema.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

  • sp_rename 中,Microsoft Fabric OBJECT 中的 Warehouse 是唯一支援@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 的統計資料物件,然後使用 將統計資料重新命名為 NewContactsp_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';