For ikke så længe siden arbejdede jeg på et projekt, hvor vi skulle ændre datatypen for en tabel. Tabellen havde millioner af rækker, og vi besluttede at oprette en separat tabel ved hjælp af den eksisterende tabeldefinition og indsætte rækkerne i den tabel. Efter at have eksporteret data til den nye tabel omdøbte vi den gamle tabel, begrænsning og indekser ved hjælp af sp_rename gemt procedure.
Den aktuelle artikel er dedikeret til måder at omdøbe indekser på.
Det grundlæggende i sp_rename lagrede procedure
Vi kan omdøbe indekset med en af følgende metoder:
- Brug af SQL Server Management Studio.
- Brug af sp_rename gemt procedure.
Lad os først forstå det grundlæggende.
sp_rename Proceduren bruges til at omdøbe tabeller, tabelkolonner, indeksnavne og brugerdefinerede typer af almindelige runtime-sprog.
Syntaksen for proceduren er som følger:
Exec sp_rename 'object_name', 'new_name', 'object_type'
- objektnavn angiver navnet på det objekt, du vil omdøbe.
- Hvis du omdøber tabellen, formatet af objektnavn parameter kan være [tabelnavn] eller [skemanavn].[tabelnavn] .
- Hvis du omdøber kolonnenavnet på tabellen, formatet af objektnavn parameter skal være [tabel_navn].[kolonne_navn].
- Hvis du omdøber tabellens indeksnavn, formatet af objektnavn parameteren skal være [skemanavn].[tabelnavn].[indeksnavn] . Eller det kan være [tabelnavn].[indeksnavn] .
Bemærk: Hvis du bruger et kvalificeret objektnavn, skal du angive anførselstegn.
- nyt_navn angiver det nye navn på objektet, der skal være den en-delte identifikator.
- objekttype angiver den type objekt, du vil omdøbe (en valgfri parameter). Værdien af objekttype skal være en af følgende:
- KOLONNE
- DATABASE
- INDEKS
- OBJEKT
- STATISTIK
Demoopsætning
Til vores forklaring og testformål har jeg udarbejdet en demo-opsætning. Der er databasen med navnet StudentDB , hvor jeg har lavet en tabel med navnet tblStudent .
Forespørgslen for at oprette databasen:
Create database [StudentDB]
Forespørgslen til at oprette tabellen:
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))
Jeg har også oprettet indekset med navnet INDX_tblStudents_Std_Code på tblStudent tabel:
USE [StudentDB]
GO
CREATE NONCLUSTERED INDEX [INDX_tblStudents_Std_Code] ON [dbo].[tblStudents]
([student_code] ASC)
Følgende forespørgsel indsætter dataene i tabellen:
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)
Lad os nu se, hvordan vi omdøber PK_tblStudenten indeks ved hjælp af SQL Server Management Studio.
Omdøb indekser ved hjælp af SSMS
Lad os først omdøbe PK_tblStudenten indeks.
- Start SQL Server Management Studio, og opret forbindelse til databasemotoren.
- Udvid StudentDB database> Tabeller > tblStudenter > Indekser
- Højreklik på PK_tblStudent indeks> vælg Omdøb fra menuen, eller enkeltklik på indeksnavnet.
Indekset bliver redigerbart. Angiv det nye navn på indekset, og tryk på Enter .
Før du ændrer indeksnavnet, vil SSMS vise følgende advarsel. Klik på Ja .
Indeksnavnet er blevet ændret, og ændringerne anvendes med det samme.
Hvis indeksnavnet ikke er opdateret, skal du opdatere indekserne mappe:
Kør følgende forespørgsel for at bekræfte, at indekset er blevet omdøbt:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')
Udgangen :
Som du kan se, er indeksnavnet blevet ændret, og SSMS viste sig at være effektiv til dette formål.
Lad os nu forstå, hvordan vi kan omdøbe indekset ved at bruge sp_rename gemt procedure.
Omdøb indekser ved hjælp af sp_rename lagrede procedure
Vi vil omdøbe indekset med navnet INDX_tblStudents_Std_Code til INDX_tblStudents_Student_Code .
Vores sp_rename lagret procedure vil fungere i følgende kode:
exec sp_rename 'dbo.tblStudents.INDX_tblStudents_Std_Code','INDX_tblStudents_Student_Code'
Kør forespørgslen for at bekræfte indeksomdøbningen:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')
Udgangen:
Vigtige bemærkninger
Sikkerhed og tilladelse
For at omdøbe indekset skal du have ALTER tilladelse til indekset.
Sådan ændrer statistik sig
Når vi omdøber indekset, omdøbes statistikken knyttet til indekset automatisk. Lad os se statistikken forbundet med den primære nøgle.
Åbn SQL Server Management Studio> Udvid den nødvendige database> tblStudents table> Statistik
Som du kan se, er statistikken blevet omdøbt.
Sådan ændres plan for udførelse af forespørgsler
Når vi omdøber indekset, ændres metadataene for forespørgselsudførelsesplanen for automatisk. For at gøre det klarere, lad os gennemgå udførelsesplanen for forespørgslen ved hjælp af PK_tblStudent indeks.
Kør følgende SELECT-sætning:
Select * from [tblStudents] where ID=’5’
Udgangen:
Indeksnavnet ændres i udførelsesplanen.
Oversigt
Derfor har vi lært om sp_rename lagret procedure syntaks og brug. Desuden har vi identificeret og prøvet to måder at omdøbe indekser på bordet på. Nu kan vi gøre det både med SSMS eller med den dedikerede lagrede procedure. Vi har også klarlagt virkningerne af at ændre indeksnavnene på statistikkerne og planerne for udførelse af forespørgsler. Hvad mere er, at finde og rette indeksfragmenteringsproblemer kan opnås ved hjælp af dbForge Index Manager. Jeg håber, at denne artikel med dens praktiske tips vil være nyttig for dit arbejde.
Relaterede artikler
Forskellige måder at omdøbe SQL Server-tabeller på