少し前まで、私はテーブルのデータ型を変更する必要があるプロジェクトに取り組んでいました。テーブルには数百万の行があり、既存のテーブル定義を使用して別のテーブルを作成し、そのテーブルに行を挿入することにしました。データを新しいテーブルにエクスポートした後、 sp_rename を使用して、古いテーブル、制約、およびインデックスの名前を変更しました。 ストアドプロシージャ。
現在の記事は、インデックスの名前を変更する方法に専念しています。
sp_renameストアドプロシージャの基本
次のいずれかの方法でインデックスの名前を変更できます。
- SQL ServerManagementStudioの使用。
- sp_renameの使用 ストアドプロシージャ。
まず、基本を理解しましょう。
sp_rename プロシージャは、テーブル、テーブル列、インデックス名、および共通言語ランタイムのユーザー定義型の名前を変更するために使用されます。
手順の構文は次のとおりです。
Exec sp_rename‘object_name’、‘new_name’、‘object_type’
- object_name 名前を変更するオブジェクトの名前を指定します。
- テーブルの名前を変更する場合は、 object_nameの形式 パラメータは[table_name]にすることができます または[schema_name]。[table_name] 。
- テーブルの列名を変更する場合は、 object_nameの形式 パラメータは[table_name]。[column_name]。である必要があります
- テーブルのインデックス名を変更する場合は、 object_nameの形式 パラメータは[schema_name]。[table_name]。[index_name]である必要があります 。または、[table_name]。[index_name]にすることもできます。 。
注: 修飾されたオブジェクト名を使用している場合は、引用符を指定する必要があります。
- new_name 1つの部分の識別子でなければならないオブジェクトの新しい名前を指定します。
- object_type 名前を変更するオブジェクトのタイプを指定します(オプションのパラメーター)。 object_typeの値 次のいずれかである必要があります。
- 列
- データベース
- インデックス
- オブジェクト
- 統計
デモのセットアップ
説明とテストの目的で、デモのセットアップを用意しました。 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 ServerManagementStudioを使用したインデックス。
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_Student_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 ServerManagementStudio>必要なデータベースを展開>tblStudentsテーブル>統計を開きます
ご覧のとおり、統計の名前が変更されました。
クエリ実行プランの変更方法
インデックスの名前を変更すると、クエリ実行プランのメタデータも自動的に変更されます。明確にするために、 PK_tblStudentを使用してクエリの実行プランを確認しましょう。 インデックス。
次のSELECTステートメントを実行します。
Select * from [tblStudents] where ID=’5’
出力:
実行プランでインデックス名が変更されました。
概要
したがって、 sp_renameについて学習しました。 ストアドプロシージャの構文と使用法。さらに、テーブルのインデックスの名前を変更する2つの方法を特定して試しました。これで、SSMSまたは専用のストアドプロシージャの両方でそれを行うことができます。また、インデックス名を変更した場合の統計とクエリ実行プランへの影響も明確にしました。さらに、インデックスの断片化の問題を見つけて修正するには、dbForgeIndexManagerを使用します。この記事と実用的なヒントがあなたの仕事に役立つことを願っています。
関連記事
SQLServerテーブルの名前を変更するさまざまな方法