sql >> Databasteknik >  >> RDS >> Database

Byta namn på index med sp_rename Procedur

För inte så länge sedan arbetade jag med ett projekt där vi behövde ändra datatypen för en tabell. Tabellen hade miljontals rader, och vi bestämde oss för att skapa en separat tabell med den befintliga tabelldefinitionen och infoga raderna i den tabellen. Efter att ha exporterat data till den nya tabellen döpte vi om den gamla tabellen, begränsningen och indexen med hjälp av sp_rename lagrad procedur.

Den aktuella artikeln är tillägnad sätten att byta namn på index.

Grunderna i den lagrade proceduren sp_rename

Vi kan byta namn på indexet med någon av följande metoder:

  1. Använder SQL Server Management Studio.
  2. Använda sp_rename lagrad procedur.

Låt oss först förstå grunderna.

sp_rename proceduren används för att byta namn på tabeller, tabellkolumner, indexnamn och användardefinierade typer av vanliga körtider.

Syntaxen för proceduren är som följer:

Exec sp_rename 'object_name', 'new_name', 'object_type'

  1. objektnamn anger namnet på objektet du vill byta namn på.
    1. Om du byter namn på tabellen, formatet för objektnamn parameter kan vara [tabellnamn] eller [schemanamn].[tabellnamn] .
    2. Om du byter namn på tabellens kolumnnamn, formatet för objektnamn parametern ska vara [tabellnamn].[kolumnnamn].
    3. Om du byter namn på tabellens indexnamn, formatet för objektnamn parametern ska vara [schema_name].[tabellnamn].[index_name] . Eller det kan vara [tabellnamn].[index_namn] .

Obs! Om du använder ett kvalificerat objektnamn måste du ange citattecken.

  1. nytt_namn anger det nya namnet på objektet som måste vara den endelade identifieraren.
  2. objekttyp anger vilken typ av objekt du vill byta namn på (en valfri parameter). Värdet för objekttyp bör vara något av följande:
    1. KOLUMN
    2. DATABAS
    3. INDEX
    4. OBJEKT
    5. STATISTIK

Demoinställningar

För vår förklaring och testsyften har jag förberett en demo-inställning. Det finns databasen som heter StudentDB , där jag har skapat en tabell som heter tblStudent .

Frågan för att skapa databasen:

Create database [StudentDB]

Frågan för att skapa 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))

Jag har också skapat indexet INDX_tblStudents_Std_Code tblStudent tabell:

USE [StudentDB]
GO
CREATE NONCLUSTERED INDEX [INDX_tblStudents_Std_Code] ON [dbo].[tblStudents]
([student_code] ASC)

Följande fråga infogar data 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)

Låt oss nu se hur vi byter namn på PK_tblStudenten index med SQL Server Management Studio.

Byt namn på index med SSMS

Låt oss först byta namn på PK_tblStudenten index.

  1. Starta SQL Server Management Studio och anslut till databasmotorn.
  2. Utöka StudentDB databas> Tabell > tblStudenter > Index
  3. Högerklicka på PK_tblStudent index> välj Byt namn från menyn, eller enkelklicka på indexnamnet.

Indexet blir redigerbart. Ange det nya namnet på indexet och tryck på Retur .

Innan du ändrar indexnamnet kommer SSMS att visa följande varning. Klicka på Ja .

Indexnamnet har ändrats och ändringarna tillämpas omedelbart.

Om indexnamnet inte uppdateras uppdaterar du indexen mapp:

Kör följande fråga för att verifiera att indexet har bytt namn:

select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')

Utgången :

Som du kan se har indexnamnet ändrats och SSMS visade sig vara effektivt för detta ändamål.

Låt oss nu förstå hur vi kan byta namn på indexet med sp_rename lagrad procedur.

Byt namn på index med den lagrade proceduren sp_rename

Vi kommer att byta namn på indexet som heter INDX_tblStudents_Std_Code till INDX_tblStudents_Student_Code .

Vår sp_rename lagrad procedur kommer att fungera i följande kod:

exec sp_rename 'dbo.tblStudents.INDX_tblStudents_Std_Code','INDX_tblStudents_Student_Code'

Kör frågan för att verifiera indexbytet:

select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')

Utdata:

Viktiga anmärkningar

Säkerhet och tillstånd

För att byta namn på indexet måste du ha ALTER behörighet på indexet.

Hur statistik förändras

När vi byter namn på indexet byts den statistik som är associerad med indexet om automatiskt. Låt oss se statistiken som är kopplad till den primära nyckeln.

Öppna SQL Server Management Studio> Utöka nödvändig databas> tblStudents table> Statistik

Som du kan se har statistiken bytt namn.

Hur exekveringsplanen ändras

När vi byter namn på indexet ändras metadata för exekveringsplanen för frågor för automatiskt. För att göra det tydligare, låt oss granska exekveringsplanen för frågan med PK_tblStudent index.

Kör följande SELECT-sats:

Select * from [tblStudents] where ID=’5’

Utdata:

Indexnamnet ändras i exekveringsplanen.

Sammanfattning

Därför har vi lärt oss om sp_rename lagrad procedursyntax och användning. Dessutom har vi identifierat och provat två sätt att byta namn på index på bordet. Nu kan vi göra det både med SSMS eller med den dedikerade lagrade proceduren. Vi har också klargjort effekterna av att ändra indexnamnen på statistiken och exekveringsplanerna för frågor. Dessutom kan hitta och fixa indexfragmenteringsproblem med hjälp av dbForge Index Manager. Jag hoppas att den här artikeln med sina praktiska tips kommer att vara till hjälp för ditt arbete.

Relaterade artiklar

Olika sätt att byta namn på SQL Server-tabeller


  1. AWS Database Migration Service DMS

  2. Oracle PL/SQL - Öka användardefinierat undantag med anpassad SQLERRM

  3. Hur man konverterar en sträng till en tidsstämpel i PostgreSQL

  4. Hur man kommenterar i SQL