Nie tak dawno pracowałem nad projektem, w którym musieliśmy zmienić typ danych tabeli. Tabela miała miliony wierszy i postanowiliśmy utworzyć osobną tabelę przy użyciu istniejącej definicji tabeli i wstawić wiersze do tej tabeli. Po wyeksportowaniu danych do nowej tabeli zmieniliśmy nazwę starej tabeli, ograniczenia i indeksów za pomocą sp_rename procedura składowana.
Niniejszy artykuł poświęcony jest sposobom zmiany nazw indeksów.
Podstawy procedury składowanej sp_rename
Możemy zmienić nazwę indeksu za pomocą jednej z następujących metod:
- Korzystanie z SQL Server Management Studio.
- Korzystanie z sp_rename procedura składowana.
Najpierw zapoznajmy się z podstawami.
sp_rename Procedura jest używana do zmiany nazw tabel, kolumn tabel, nazw indeksów i typów zdefiniowanych przez użytkownika w czasie wykonywania wspólnego języka.
Składnia procedury jest następująca:
Exec sp_rename „nazwa_obiektu”, „nowa_nazwa”, „typ_obiektu”
- nazwa_obiektu określa nazwę obiektu, którego nazwę chcesz zmienić.
- Jeśli zmieniasz nazwę tabeli, format nazwa_obiektu parametrem może być [nazwa_tabeli] lub [nazwa_schematu].[nazwa_tabeli] .
- Jeśli zmieniasz nazwę kolumny tabeli, format object_name parametr powinien mieć wartość [nazwa_tabeli].[nazwa_kolumny].
- Jeśli zmieniasz nazwę indeksu tabeli, format nazwa_obiektu parametr powinien mieć postać [nazwa_schematu].[nazwa_tabeli].[nazwa_indeksu] . Lub może to być [nazwa_tabeli].[nazwa_indeksu] .
Uwaga: Jeśli używasz kwalifikowanej nazwy obiektu, musisz podać znak cudzysłowu.
- nowa_nazwa określa nową nazwę obiektu, która musi być jednoczęściowym identyfikatorem.
- typ_obiektu określa typ obiektu, którego nazwę chcesz zmienić (parametr opcjonalny). Wartość object_type powinien być jednym z następujących:
- KOLUMNA
- BAZA DANYCH
- INDEKS
- OBIEKT
- STATYSTYKI
Konfiguracja demonstracyjna
Dla naszych wyjaśnień i celów testowych przygotowałem konfigurację demonstracyjną. Istnieje baza danych o nazwie StudentDB , gdzie utworzyłem tabelę o nazwie tblStudent .
Zapytanie do utworzenia bazy danych:
Create database [StudentDB]
Zapytanie do utworzenia tabeli:
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))
Utworzyłem również indeks o nazwie INDX_tblStudents_Std_Code na tabeli Student tabela:
USE [StudentDB]
GO
CREATE NONCLUSTERED INDEX [INDX_tblStudents_Std_Code] ON [dbo].[tblStudents]
([student_code] ASC)
Następujące zapytanie wstawia dane do tabeli:
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)
Zobaczmy teraz, jak zmienimy nazwę PK_tblStudent indeksuj za pomocą SQL Server Management Studio.
Zmień nazwy indeksów za pomocą SSMS
Najpierw zmieńmy nazwę PK_tblStudent indeks.
- Uruchom SQL Server Management Studio i połącz się z silnikiem bazy danych.
- Rozwiń StudentDB baza danych> Tabele > tblStudenci > Indeksy
- Kliknij prawym przyciskiem myszy PK_tblStudent indeks> wybierz Zmień nazwę z menu lub kliknij raz nazwę indeksu.
Indeks staje się edytowalny. Podaj nową nazwę indeksu i naciśnij Enter .
Przed zmianą nazwy indeksu SSMS wyświetli następujące ostrzeżenie. Kliknij Tak .
Nazwa indeksu została zmieniona, a zmiany zostaną zastosowane natychmiast.
Jeśli nazwa indeksu nie została zaktualizowana, odśwież Indeksy folder:
Uruchom następujące zapytanie, aby sprawdzić, czy nazwa indeksu została zmieniona:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')
Wynik :
Jak widać, nazwa indeksu została zmieniona, a SSMS okazał się skuteczny w tym celu.
Teraz zrozumiemy, jak możemy zmienić nazwę indeksu za pomocą sp_rename procedura składowana.
Zmień nazwy indeksów za pomocą procedury składowanej sp_rename
Zamierzamy zmienić nazwę indeksu na INDX_tblStudents_Std_Code do INDX_tblStudents_Student_Code .
Nasza sp_rename procedura składowana będzie działać w następującym kodzie:
exec sp_rename 'dbo.tblStudents.INDX_tblStudents_Std_Code','INDX_tblStudents_Student_Code'
Uruchom zapytanie, aby zweryfikować zmianę nazwy indeksu:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')
Wynik:
Ważne uwagi
Bezpieczeństwo i uprawnienia
Aby zmienić nazwę indeksu, musisz mieć ALTER pozwolenie na indeks.
Jak zmieniają się statystyki
Kiedy zmieniamy nazwę indeksu, statystyki związane z indeksem są automatycznie zmieniane. Zobaczmy statystyki związane z kluczem podstawowym.
Otwórz SQL Server Management Studio> rozwiń niezbędną bazę danych> tabela tblStudents> Statystyki
Jak widać, nazwy statystyk zostały zmienione.
Jak zmienia się plan wykonania zapytania
Gdy zmieniamy nazwę indeksu, metadane planu wykonania zapytania zmieniają się zbyt automatycznie. Aby było to jaśniejsze, przejrzyjmy plan wykonania zapytania za pomocą PK_tblStudent indeks.
Uruchom następującą instrukcję SELECT:
Select * from [tblStudents] where ID=’5’
Wynik:
Nazwa indeksu została zmieniona w planie wykonania.
Podsumowanie
Dlatego dowiedzieliśmy się o sp_rename składnia i użycie procedury składowanej. Ponadto zidentyfikowaliśmy i wypróbowaliśmy dwa sposoby zmiany nazw indeksów w tabeli. Teraz możemy to zrobić zarówno za pomocą SSMS, jak i dedykowanej procedury składowanej. Wyjaśniliśmy również wpływ zmiany nazw indeksów na statystyki i plany wykonywania zapytań. Co więcej, znalezienie i naprawę problemów z fragmentacją indeksów można osiągnąć za pomocą dbForge Index Manager. Mam nadzieję, że ten artykuł z praktycznymi wskazówkami okaże się pomocny w Twojej pracy.
Powiązane artykuły
Różne sposoby zmiany nazwy tabel SQL Server