sp_rename (T-SQL)

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 tipe tabel, indeks, kolom, jenis data alias, atau Microsoft .NET Framework jenis yang ditentukan pengguna runtime bahasa umum (CLR).

Catatan

Di Azure Synapse Analytics, sp_rename ada 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 menyarankan agar 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.

Konvensi Sintaksis T-SQL

Sintaks

Sintaks untuk sp_rename dalam database SQL Server dan Azure SQL:

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'

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 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'

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'

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 database Azure SQL.

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 sp_rename pernyataan (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 Database Azure SQL:

  • 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 dengan sp_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, 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.

  • 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 SELECT 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.

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 tabel menjadi SalesTerritorySalesTerr dalam Sales 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 KUNCI PRIMER, batasan CHECK, dan batasan KUNCI ASING. 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.
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 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 skema dbo.

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

Lihat juga