Не толкова отдавна работех по проект, в който трябваше да променим типа данни на таблица. Таблицата имаше милиони редове и ние решихме да създадем отделна таблица, използвайки съществуващата дефиниция на таблицата и да вмъкнем редовете в тази таблица. След като експортирахме данни в новата таблица, преименувахме старата таблица, ограничение и индекси с помощта на sp_rename съхранена процедура.
Настоящата статия е посветена на начините за преименуване на индекси.
Основите на съхранената процедура sp_rename
Можем да преименуваме индекса с един от следните методи:
- Използване на SQL Server Management Studio.
- Използване на sp_rename съхранена процедура.
Първо, нека разберем основите.
sp_rename Процедурата се използва за преименуване на таблици, колони на таблици, имена на индекси и типове, дефинирани от потребителя по време на изпълнение на общ език.
Синтаксисът на процедурата е както следва:
Exec sp_rename ‘object_name’, ‘new_name’, ‘object_type’
- име_на_обект определя името на обекта, който искате да преименувате.
- Ако преименувате таблицата, форматът на име_на_обект параметърът може да бъде [име_на_таблица] или [име_на_схема].[име_на_таблица] .
- Ако преименувате името на колоната на таблицата, форматът на име_на_обект параметърът трябва да бъде [име_на_таблица].[име_на_колона].
- Ако преименувате индексното име на таблицата, форматът на име_на_обект параметърът трябва да бъде [schema_name].[table_name].[index_name] . Или може да бъде [име_на_таблица].[име_индекс] .
Забележка: Ако използвате квалифицирано име на обект, трябва да посочите кавички.
- ново_име указва новото име на обекта, което трябва да бъде едночастният идентификатор.
- тип_обект определя типа обект, който искате да преименувате (незадължителен параметър). Стойността на тип_обект трябва да бъде някое от следните:
- КОЛОНА
- БАЗА ДАННИ
- ИНДЕКС
- ОБЕКТ
- СТАТИСТИКА
Настройка на демонстрация
За нашето обяснение и тестови цели, подготвих демо настройка. Има база данни с име StudentDB , където създадох таблица с име tblStudent .
Заявката за създаване на базата данни:
Create database [StudentDB]
Заявката за създаване на таблицата:
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))
Също така създадох индекса с име INDX_tblStudents_Std_Code вtblStudent таблица:
USE [StudentDB]
GO
CREATE NONCLUSTERED INDEX [INDX_tblStudents_Std_Code] ON [dbo].[tblStudents]
([student_code] ASC)
Следната заявка вмъква данните в таблицата:
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)
Сега нека видим как преименуваме PK_tblStudent индексиране с помощта на SQL Server Management Studio.
Преименувайте индекси с помощта на SSMS
Първо, нека преименуваме PK_tblStudent индекс.
- Стартирайте SQL Server Management Studio и се свържете с двигателя на базата данни.
- Разгънете StudentDB база данни> Таблици > tblStudents > Индекси
- Щракнете с десния бутон върху PK_tblStudent индекс> изберете Преименуване от менюто или еднократно щракване върху името на индекса.
Индексът става редактируем. Посочете новото име на индекса и натиснете Enter .
Преди да промените името на индекса, SSMS ще покаже следното предупреждение. Кликнете върху Да .
Името на индекса е променено и промените се прилагат незабавно.
Ако името на индекса не е актуализирано, опреснете Индексите папка:
Изпълнете следната заявка, за да проверите дали индексът е преименуван:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')
Изход :
Както можете да видите, името на индекса е променено и SSMS се оказа ефективен за тази цел.
Сега нека разберем как можем да преименуваме индекса с помощта на sp_rename съхранена процедура.
Преименувайте индекси с помощта на съхранената процедура sp_rename
Ще преименуваме индекса с име INDX_tblStudents_Std_Code до INDX_tblStudents_Students_Code .
Нашето sp_rename съхранената процедура ще работи в следния код:
exec sp_rename 'dbo.tblStudents.INDX_tblStudents_Std_Code','INDX_tblStudents_Student_Code'
Изпълнете заявката, за да проверите преименуването на индекса:
select object_name(object_id) [table name],name [Index Name], type_desc [Index Type] from sys.indexes where object_id=object_id('tblStudents')
Изходът:
Важни бележки
Сигурност и разрешение
За да преименувате индекса, трябва да имате ALTER разрешение за индекса.
Как се променя статистиката
Когато преименуваме индекса, статистическите данни, свързани с индекса, се преименуват автоматично. Нека разгледаме статистическите данни, свързани с първичния ключ.
Отворете SQL Server Management Studio> Разгънете необходимата база данни> таблица tblStudents> Статистика
Както можете да видите, статистиката е преименувана.
Как се променя планът за изпълнение на заявка
Когато преименуваме индекса, метаданните на плана за изпълнение на заявката се променят твърде автоматично. За да стане по-ясно, нека прегледаме плана за изпълнение на заявката с помощта на PK_tblStudent индекс.
Изпълнете следния оператор SELECT:
Select * from [tblStudents] where ID=’5’
Изходът:
Името на индекса се променя в плана за изпълнение.
Резюме
Затова научихме за sp_rename синтаксис и използване на съхранени процедури. Освен това идентифицирахме и опитахме два начина за преименуване на индекси в таблицата. Сега можем да го направим както с SSMS, така и със специалната съхранена процедура. Ние също така изяснихме въздействието от промяната на имената на индексите върху статистическите данни и плановете за изпълнение на заявки. Нещо повече, намирането и коригирането на проблеми с фрагментацията на индекса може да бъде постигнато с помощта на dbForge Index Manager. Надявам се, че тази статия с нейните практически съвети ще се окаже полезна за вашата работа.
Сродни статии
Различни начини за преименуване на таблици на SQL Server