sp_rename (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticstitik akhir analitik SQL di Microsoft FabricWarehouse 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.

Konvensi sintaks transact-SQL

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
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 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 dalam sp_rename pernyataan. Kolom hanya dapat diganti namanya jika bukan kolom distribusi. sp_rename hanya dapat digunakan untuk mengganti nama COLUMN 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 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, 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 SalesTerritorySalesTerr 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_VendorIDIX_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';