sp_rename (SQL Bertransaksi)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure Synapse Analytics
Mengubah nama objek yang dibuat pengguna di database saat ini. Objek ini bisa berupa jenis tabel, indeks, kolom, jenis data alias, atau Microsoft .NET Framework common language runtime (CLR) yang ditentukan pengguna.
Catatan
Di Azure Synapse Analytics, sp_rename berada di Pratinjau untuk kumpulan SQL khusus dan hanya dapat digunakan untuk mengganti nama KOLOM di objek pengguna.
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, pemicu, fungsi yang ditentukan pengguna, atau tampilan yang tersimpan; sebagai gantinya, letakkan objek dan buat ulang dengan nama baru.
Sintaks
-- Transact-SQL Syntax for sp_rename in SQL Server and Azure SQL Database
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
-- Transact-SQL Syntax for sp_rename (preview) in Azure Synapse Analytics
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
, [ @objtype = ] 'COLUMN'
Argumen
[ @objname = ] 'object_name'
Adalah 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 bentuk 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 schema.constraint.
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'
Adalah nama baru untuk objek yang ditentukan. new_name harus berupa nama satu bagian dan harus mengikuti aturan untuk pengidentifikasi. newname adalah sysname, tanpa default.
Catatan
Nama pemicu tidak dapat dimulai dengan # atau ##.
[ @objtype = ] 'object_type'
Adalah jenis objek yang diganti namanya. object_type adalah varchar(13), dengan default NULL, dan dapat menjadi salah satu nilai ini.
| Nilai | Deskripsi |
|---|---|
| KOLOM | 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 yang dibuat secara eksplisit oleh pengguna atau dibuat secara implisit dengan indeks. Mengganti nama statistik indeks juga akan mengganti nama indeks secara otomatis. |
| USERDATATYPE | Jenis yang Ditentukan Pengguna CLR ditambahkan dengan menjalankan CREATE TYPE atau sp_addtype. |
[ @objtype = ] 'COLUMN' Berlaku untuk: Azure Synapse Analytics
Dalam sp_rename (pratinjau) untuk Azure Synapse Analytics, COLUMN adalah parameter wajib yang menentukan bahwa jenis objek yang akan diganti namanya adalah kolom. Ini adalah varchar(13) tanpa nilai default dan harus selalu disertakan dalam pernyataan sp_rename (pratinjau). Kolom hanya dapat diganti namanya jika merupakan kolom non-distribusi.
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 PRIMARY KEY atau UNIQUE diganti namanya. Jika indeks yang diganti namanya terkait dengan batasan KUNCI PRIMER, batasan KUNCI PRIMER juga secara otomatis diganti namanya dengan sp_rename.
Berlaku untuk SQL Server (semua versi yang didukung) dan Azure SQL Database
sp_rename dapat digunakan untuk mengganti nama indeks XML primer dan sekunder.
Berlaku untuk SQL Server (semua versi yang didukung) dan Azure SQL Database
Mengganti nama prosedur tersimpan, fungsi, tampilan, atau pemicu tidak akan mengubah nama objek terkait baik di kolom definisi tampilan katalog sys.sql_modules atau diperoleh menggunakan fungsi bawaan OBJECT_DEFINITION . Oleh karena itu, sebaiknya sp_rename tidak digunakan untuk mengganti nama jenis objek ini. Sebagai gantinya, hilangkan 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 objek.
Berlaku untuk SQL Server (semua versi yang didukung), Azure SQL Database, dan Azure Synapse Analytics
Anda hanya bisa mengubah nama objek atau tipe data dalam database saat ini. Nama sebagian besar tipe data sistem dan objek sistem tidak dapat diubah.
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
Contoh
A. Mengganti nama tabel
Contoh berikut mengganti nama SalesTerritory tabel menjadi SalesTerrSales dalam skema.
USE AdventureWorks2012;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. Mengganti nama kolom
Contoh berikut mengganti nama TerritoryID kolom dalam SalesTerritory tabel menjadi TerrID.
USE AdventureWorks2012;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C. Mengganti nama indeks
Contoh berikut mengganti nama indeks menjadi IX_ProductVendor_VendorIDIX_VendorID.
USE AdventureWorks2012;
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 AdventureWorks2012;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO
E. Mengganti nama batasan
Contoh berikut mengganti nama batasan PRIMARY KEY, batasan CHECK, dan batasan FOREIGN KEY. Saat mengganti nama batasan, skema tempat batasan harus ditentukan.
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. Mengganti nama statistik
Contoh berikut membuat objek statistik bernama contactMail1 lalu mengganti nama statistik menjadi NewContact dengan menggunakan sp_rename. Saat mengganti nama statistik, objek harus ditentukan dalam format schema.table.statistics_name.
CREATE STATISTICS ContactMail1
ON Person.Person (BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
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 skema dbo.
CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO
Lihat juga
sys.sql_expression_dependencies (SQL Bertransaksi)
sys.sql_modules (SQL Bertransaksi)
Prosedur Tersimpan Sistem (SQL Transaksi)
Prosedur Tersimpan Mesin Database (SQL Transact)
