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 支援 。
警告
變更物件名稱的任何部分,可能破壞指令碼和預存程序。 我們建議您不要使用此語句來重新命名預存程式、觸發程式、使用者定義函式或檢視;請改為卸載 物件,然後以新的名稱重新建立它。
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.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 FabricOBJECT
中的 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_refreshsqlmodule 或 sp_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';
相關內容
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: