sp_rename (T-SQL)
Berlaku untuk: Titik akhir analitik SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Mengubah nama objek yang dibuat pengguna dalam database saat ini. Objek ini bisa berupa tabel, indeks, kolom, tipe data alias, atau Microsoft
Jenis yang ditentukan pengguna .NET Framework common language runtime (CLR).
Penting
Beberapa objek sistem dan sintaks Transact-SQL tidak didukung dalam kumpulan SQL tanpa server di Azure Synapse Analytics, termasuk artikel ini. Untuk informasi selengkapnya, kunjungi dukungan T-SQL.
Perhatian
Mengubah bagian mana pun dari nama objek dapat merusak skrip dan prosedur tersimpan. Kami sarankan Anda tidak menggunakan pernyataan ini untuk mengganti nama prosedur tersimpan, pemicu, fungsi yang ditentukan pengguna, atau tampilan; sebagai gantinya, letakkan objek dan buat ulang dengan nama baru.
Sintaks
Sintaks untuk sp_rename
di SQL Server dan Azure SQL Database:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
Sintaks untuk sp_rename
(pratinjau) di Azure Synapse Analytics:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
, [ @objtype = ] 'COLUMN'
Sintaks untuk sp_rename
dalam Microsoft Fabric:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'OBJECT' ]
Argumen
[ @objname = ] 'object_name'
Nama objek pengguna atau jenis data yang memenuhi syarat atau tidak memenuhi syarat saat ini. Jika objek yang akan diganti namanya adalah kolom dalam tabel, object_name harus dalam formulir table.column atau schema.table.column. Jika objek yang akan diganti namanya adalah indeks, object_name harus dalam bentuk table.index atau schema.table.index. Jika objek yang akan diganti namanya adalah batasan, object_name harus dalam bentuk skema.batasan.
Tanda kutip hanya diperlukan jika objek yang memenuhi syarat ditentukan. Jika nama yang sepenuhnya memenuhi syarat, termasuk nama database, disediakan, nama database harus menjadi nama database saat ini. object_name adalah nvarchar(776), tanpa default.
[ @newname = ] 'new_name'
Nama baru untuk objek yang ditentukan. new_name harus berupa nama satu bagian dan harus mengikuti aturan untuk pengidentifikasi. newname adalah sysname, tanpa default.
Nama pemicu tidak dapat dimulai dengan # atau ##.
Berlaku untuk Warehouse di Microsoft Fabric:
- Nama skema tidak boleh berisi
/
atau\
diakhir.
dengan . - Nama tabel tidak boleh berisi
/
atau\
diakhir.
dengan .
[ @objtype = ] 'object_type'
Jenis objek yang diganti namanya. object_type adalah varchar(13), dengan default NULL
, dan dapat menjadi salah satu nilai ini.
Nilai | Deskripsi |
---|---|
COLUMN |
Kolom yang akan diganti namanya. |
DATABASE |
Database yang ditentukan pengguna. Tipe objek ini diperlukan saat mengganti nama database. |
INDEX |
Indeks yang ditentukan pengguna. Mengganti nama indeks dengan statistik, juga secara otomatis mengganti nama statistik. |
OBJECT |
Item jenis yang dilacak di sys.objects. Misalnya, OBJECT dapat digunakan untuk mengganti nama objek termasuk batasan (CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY), tabel pengguna, dan aturan. |
STATISTICS |
Berlaku untuk: SQL Server 2012 (11.x) dan yang lebih baru dan Azure SQL Database. Statistik dibuat secara eksplisit oleh pengguna atau dibuat secara implisit dengan indeks. Mengganti nama statistik indeks secara otomatis mengganti nama indeks juga. |
USERDATATYPE |
Jenis yang ditentukan pengguna CLR ditambahkan dengan menjalankan CREATE TYPE atau sp_addtype. |
Berlaku untuk: Azure Synapse Analytics
- Dalam
sp_rename
(pratinjau) untuk Azure Synapse Analytics,COLUMN
adalah nilai wajib yang menentukan bahwa jenis objek yang akan diganti namanya adalah kolom, dan harus selalu disertakan dalamsp_rename
pernyataan. Kolom hanya dapat diganti namanya jika bukan kolom distribusi.sp_rename
hanya dapat digunakan untuk mengganti namaCOLUMN
dalam objek pengguna.
Berlaku untuk: Microsoft Fabric
- Untuk
sp_rename
Gudang di Microsoft Fabric,OBJECT
adalah satu-satunya nilai yang didukung untuk @objtype. - Untuk
sp_rename
titik akhir analitik SQL di Microsoft Fabric,OBJECT
adalah satu-satunya nilai yang didukung untuk @objtype. Tabel tidak dapat diganti namanya.
Mengembalikan nilai kode
0
(berhasil) atau angka bukan nol (kegagalan).
Keterangan
Berlaku untuk SQL Server (semua versi yang didukung) dan Azure SQL Database:
sp_rename
secara otomatis mengganti nama indeks terkait setiap kali batasan KUNCI PRIMER atau UNIK diganti namanya. Jika indeks yang diganti namanya terkait dengan batasan KUNCI PRIMER, batasan KUNCI PRIMER juga secara otomatis diganti namanya dengansp_rename
.sp_rename
dapat digunakan untuk mengganti nama indeks XML primer dan sekunder.Mengganti nama prosedur tersimpan, fungsi, tampilan, atau pemicu tidak akan mengubah nama objek yang sesuai baik di kolom definisi tampilan katalog sys.sql_modules atau diperoleh menggunakan fungsi bawaan OBJECT_DEFINITION . Oleh karena itu, kami menyarankan agar
sp_rename
tidak digunakan untuk mengganti nama jenis objek ini. Sebagai gantinya, letakkan dan buat ulang objek dengan nama barunya.
Berlaku untuk SQL Server (semua versi yang didukung), Azure SQL Database, dan Azure Synapse Analytics:
Mengganti nama objek seperti tabel atau kolom tidak akan secara otomatis mengganti nama referensi ke objek tersebut. Anda harus mengubah objek apa pun yang mereferensikan objek yang diganti namanya secara manual. Misalnya, jika Anda mengganti nama kolom tabel dan kolom tersebut direferensikan dalam pemicu, Anda harus memodifikasi pemicu untuk mencerminkan nama kolom baru. Gunakan sys.sql_expression_dependencies untuk mencantumkan dependensi pada objek sebelum mengganti nama.
Mengganti nama kolom tidak secara otomatis memperbarui metadata untuk objek apa pun yang MEMILIH semua kolom (menggunakan ) dari tabel tersebut
*
. Misalnya, jika Anda mengganti nama kolom tabel dan kolom tersebut direferensikan oleh tampilan atau fungsi yang tidak terikat skema yang SELECTs semua kolom (menggunakan*
), metadata untuk tampilan atau fungsi terus mencerminkan nama kolom asli. Refresh metadata menggunakan sp_refreshsqlmodule atau sp_refreshview.Anda bisa mengubah nama objek atau tipe data dalam database saat ini saja. Nama sebagian besar jenis data sistem dan objek sistem tidak dapat diubah.
Jika Anda menggunakan lebih dari 128 karakter untuk nama baru, hanya 128 karakter pertama yang digunakan dan sisanya dipotong.
Berlaku untuk Azure Synapse Analytics:
- Di Azure Synapse Analytics,
sp_rename
ada di Pratinjau untuk kumpulan SQL khusus.
Izin
Untuk mengganti nama objek, kolom, dan indeks, memerlukan izin UBAH pada objek. Untuk mengganti nama jenis pengguna, memerlukan izin CONTROL pada jenis tersebut. Untuk mengganti nama database, memerlukan keanggotaan dalam peran server tetap sysadmin atau dbcreator . Untuk mengganti nama tabel ledger, diperlukan izin ALTER LEDGER.
Contoh
J. Mengganti nama tabel
Contoh berikut mengganti nama tabel menjadi SalesTerritory
SalesTerr
dalam Sales
skema.
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. Mengganti nama kolom
Contoh berikut mengganti nama TerritoryID
kolom dalam SalesTerritory
tabel menjadi TerrID
.
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C. Mengganti nama indeks
Contoh berikut mengganti nama indeks menjadi IX_ProductVendor_VendorID
IX_VendorID
.
USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. Mengganti nama jenis data alias
Contoh berikut mengganti nama Phone
jenis data alias menjadi Telephone
.
USE AdventureWorks2022;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO
E. Mengganti nama batasan
Contoh berikut mengganti nama batasan KUNCI PRIMER, batasan CHECK, dan batasan KUNCI ASING. Saat mengganti nama batasan, skema tempat batasan harus ditentukan.
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. Mengganti nama statistik
Contoh berikut membuat objek statistik bernama contactMail1
lalu mengganti nama statistik menjadi NewContact
dengan menggunakan sp_rename
. Saat Anda mengganti nama statistik, objek harus ditentukan dalam format 'schema.table.statistics_name''.
CREATE STATISTICS ContactMail1
ON Person.Person (BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
EXEC sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';
Contoh: Azure Synapse Analytics
G. Mengganti nama kolom
Contoh berikut mengganti nama c1
kolom dalam table1
tabel menjadi col1
.
Catatan
Fitur Azure Synapse Analytics ini masih dalam pratinjau untuk kumpulan SQL khusus dan saat ini hanya tersedia untuk objek dalam dbo
skema.
CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO
H. Mengganti nama objek
Contoh berikut mengganti nama tabel dbo.table1
menjadi dbo.table2
, menggunakan jenis .OBJECT
EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';