Belum lama ini, saya sedang mengerjakan sebuah proyek di mana kami perlu mengubah tipe data tabel. Tabel memiliki jutaan baris, dan kami memutuskan untuk membuat tabel terpisah menggunakan definisi tabel yang ada dan memasukkan baris ke dalam tabel itu. Setelah mengekspor data ke tabel baru, kami mengganti nama tabel, batasan, dan indeks lama menggunakan sp_rename prosedur tersimpan.
Artikel saat ini didedikasikan untuk cara mengganti nama indeks.
Dasar-dasar prosedur tersimpan sp_rename
Kita dapat mengganti nama indeks dengan salah satu metode berikut:
- Menggunakan SQL Server Management Studio.
- Menggunakan sp_rename prosedur tersimpan.
Pertama, mari kita pahami dasar-dasarnya.
sp_rename prosedur digunakan untuk mengganti nama tabel, kolom tabel, nama indeks, dan jenis runtime bahasa umum yang ditentukan pengguna.
Sintaks prosedurnya adalah sebagai berikut:
Exec sp_rename 'object_name', 'new_name', 'object_type'
- nama_objek menentukan nama objek yang ingin Anda ganti namanya.
- Jika Anda mengganti nama tabel, format nama_objek parameternya bisa [nama_tabel] atau [nama_skema].[nama_tabel] .
- Jika Anda mengganti nama kolom tabel, format object_name parameter harus [nama_tabel].[nama_kolom].
- Jika Anda mengganti nama indeks tabel, format object_name parameter harus [nama_skema].[nama_tabel].[nama_indeks] . Atau bisa juga [nama_tabel].[nama_indeks] .
Catatan: Jika Anda menggunakan nama objek yang memenuhi syarat, Anda harus menentukan tanda kutip.
- nama_baru menentukan nama baru objek yang harus menjadi pengenal satu bagian.
- jenis_objek menentukan jenis objek yang ingin Anda ganti namanya (parameter opsional). Nilai dari object_type harus salah satu dari berikut ini:
- KOLOM
- BASIS DATA
- INDEX
- OBJEK
- STATISTIKA
Penyiapan demo
Untuk penjelasan dan tujuan pengujian kami, saya telah menyiapkan pengaturan demo. Ada database bernama StudentDB , di mana saya telah membuat tabel bernama tblStudent .
Query untuk membuat database:
Create database [StudentDB]
Kueri untuk membuat tabel:
USE [StudentDB]
GO
CREATE TABLE [dbo].[tblStudents](
[ID] [int] IDENTITY(1,1) NOT NULL,
[student_name] [varchar](250) NOT NULL,
[student_code] [varchar](5) NOT NULL,
[student_grade] [char](2) NOT NULL,
[SchoolID] [int] NOT NULL,
CONSTRAINT [PK_tblStudent] PRIMARY KEY CLUSTERED([ID] ASC))
Saya juga telah membuat indeks bernama INDX_tblStudents_Std_Code di tblStudent tabel:
USE [StudentDB]
GO
CREATE NONCLUSTERED INDEX [INDX_tblStudents_Std_Code] ON [dbo].[tblStudents]
([student_code] ASC)
Kueri berikut memasukkan data ke dalam tabel:
insert into [tblStudents]
(student_name,student_code,student_grade,SchoolID)
values
('Nisarg Upadhyay','ST001','A',1),
('Dixit Upadhyay','ST003','A',1),
('Bharti Upadhyay','ST004','C',2),
('Nimesh Patel','ST005','C',2),
('Raghav Dave','ST006','A',1)
Sekarang, mari kita lihat bagaimana kita mengganti nama PK_tblStudent indeks menggunakan SQL Server Management Studio.
Ganti nama indeks menggunakan SSMS
Pertama, mari kita ganti nama PK_tblStudent indeks.
- Luncurkan SQL Server Management Studio dan sambungkan ke mesin database.
- Luaskan StudentDB database> Tabel > tblStudents > Indeks
- Klik kanan pada PK_tblStudent indeks> pilih Ganti nama dari menu, atau klik satu kali pada nama indeks.
Indeks menjadi dapat diedit. Tentukan nama baru indeks dan tekan Enter .
Sebelum mengubah nama indeks, SSMS akan menampilkan peringatan berikut. Klik Ya .
Nama indeks telah diubah, dan perubahan segera diterapkan.
Jika nama indeks tidak diperbarui, segarkan Indeks map:
Jalankan kueri berikut untuk memverifikasi bahwa indeks telah diubah namanya:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')
Keluaran :
Seperti yang Anda lihat, nama indeks telah diubah, dan SSMS terbukti efisien untuk tujuan ini.
Sekarang, mari kita pahami bagaimana kita dapat mengganti nama indeks menggunakan sp_rename prosedur tersimpan.
Ganti nama indeks menggunakan prosedur tersimpan sp_rename
Kami akan mengganti nama indeks dengan nama INDX_tblStudents_Std_Code ke INDX_tblStudents_Student_Code .
sp_rename Our kami prosedur tersimpan akan bekerja dalam kode berikut:
exec sp_rename 'dbo.tblStudents.INDX_tblStudents_Std_Code','INDX_tblStudents_Student_Code'
Jalankan kueri untuk memverifikasi penggantian nama indeks:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')
Keluaran:
Catatan Penting
Keamanan dan Izin
Untuk mengganti nama indeks, Anda harus memiliki ALTER izin pada indeks.
Bagaimana Statistik berubah
Saat kami mengganti nama indeks, statistik yang terkait dengan indeks akan diganti namanya secara otomatis. Mari kita lihat statistik yang terkait dengan Kunci Utama.
Buka SQL Server Management Studio> Perluas database yang diperlukan> tabel tblStudents> Statistik
Seperti yang Anda lihat, statistik telah diganti namanya.
Bagaimana rencana eksekusi kueri berubah
Saat kami mengganti nama indeks, metadata dari rencana eksekusi kueri juga berubah secara otomatis. Agar lebih jelas, mari kita tinjau rencana eksekusi kueri menggunakan PK_tblStudent indeks.
Jalankan pernyataan SELECT berikut:
Select * from [tblStudents] where ID=’5’
Keluaran:
Nama indeks diubah dalam rencana eksekusi.
Ringkasan
Oleh karena itu, kami telah mempelajari tentang sp_rename sintaks prosedur tersimpan dan penggunaan. Selain itu, kami telah mengidentifikasi dan mencoba dua cara untuk mengganti nama indeks di atas meja. Sekarang kita dapat melakukannya dengan SSMS atau dengan prosedur tersimpan khusus. Kami juga telah mengklarifikasi dampak perubahan nama indeks pada statistik dan rencana eksekusi kueri. Terlebih lagi, menemukan dan memperbaiki masalah fragmentasi indeks dapat diselesaikan dengan bantuan Manajer Indeks dbForge. Saya harap artikel ini dengan tips praktisnya terbukti bermanfaat untuk pekerjaan Anda.
Artikel terkait
Berbagai Cara untuk Mengganti Nama Tabel SQL Server