最も重要なデータベース管理者の職務の1つは、データベースオブジェクトの管理です。たとえば、アプリケーションロジックが変更され、DBAがデータベースオブジェクト名を変更する必要がある場合があります。名前を変更してもアプリケーションが破損しないようにする必要があるため、このタスクは非常に重要です。
最近、いくつかのテーブルの名前を変更する必要があるプロジェクトが割り当てられました。ここでは、SQLServerテーブルの名前をいくつかの方法で変更する方法を説明します。
次を使用してテーブルの名前を変更できます:
- SQLServer管理スタジオ。
- sp_rename ストアドプロシージャ。
また、テーブルの名前を変更した後に発生する可能性のある潜在的なエラーと必要な注意事項についても説明します。この記事はデモ指向であるため、SQLServerインスタンスに次のオブジェクトを作成しました。
- StudentDBという名前のデータベース 。
- tblSchoolという名前の2つのテーブル およびtblStudent 。
- tblSchool間の外部キー およびtblStudent 。 tblSchool は親テーブルであり、 tblStudent は子テーブルです。
- sp_getStudentsという名前のストアドプロシージャ 。
- vwStudentsという名前のビュー 。
上記のデータベースオブジェクトを作成するために適用されるT-SQLコードは次のとおりです。
データベースの作成:
Create database [StudentDB]
Go
テーブルと外部キーを作成します:
Use [StudentDB]
Go
CREATE TABLE [dbo].[tblSchool](
[School_ID] [int] IDENTITY(1,1) NOT NULL,
[School_Name] [varchar](500) NULL,
[City] [varchar](50) NULL,
CONSTRAINT [PK_tblSchool] PRIMARY KEY CLUSTERED
(
[School_ID] ASC
)
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tblStudent](
[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
))
GO
ALTER TABLE [dbo].[tblStudent] WITH CHECK ADD CONSTRAINT [FK_tblStudent_tblSchool] FOREIGN KEY([SchoolID])
REFERENCES [dbo].[tblSchool] ([School_ID])
GO
ALTER TABLE [dbo].[tblStudent] CHECK CONSTRAINT [FK_tblStudent_tblSchool]
GO
tblSchoolとtblStudentのE-R図:
ダミーデータをテーブルに挿入します:
INSERT INTO tblschool
(school_name,
city)
VALUES ('Nalanda School',
'Mehsana'),
('Sarvajanik School',
'Mehsana')
go
INSERT INTO tblstudent
(student_name,
student_code,
student_grade,
schoolid)
VALUES ('Nisarg Upadhyay',
'ST001',
'A ',
1),
('Dixit Upadhyay',
'ST002',
'A ',
1),
('Bharti Upadhyay',
'ST003',
'C',
2),
('Nimesh Patel',
'ST004',
'C',
2),
('Raghav Dave',
'ST005',
'A',
1)
go
ストアドプロシージャを作成します:
USE studentdb
go
CREATE PROCEDURE Sp_getstudent
AS
BEGIN
SELECT id,
student_code,
student_name,
student_grade,
school_name,
city
FROM tblstudent a
INNER JOIN tblschool b
ON a.schoolid = b.school_id
END
ビューを作成する:
use StudentDB
go
create view vwStudents
as
select student_code [Student Code],
student_name [Student Name],
student_grade [Student Grade],
School_Name [School Name],
City [City]
from tblStudent a inner join tblSchool b on a.SchoolID=b.School_ID
sp_renameコマンドを使用してテーブル名の名前を変更する
sp_renameを使用できます SQL Serverデータベースのオブジェクトの名前を変更するためのストアドプロシージャ(テーブル内のデータを変更するalter table sql server演算子と混同しないでください)。構文は次のとおりです。
Exec sp_rename ‘schema_name.old_name’,’schema_name.new_name’
- Schema_name.old_name 変更するテーブルの名前です。
- Schema_name.new_name は新しい名前です。
それでは、 tblStudentの名前を変更しましょう tbl_Studentsへのテーブル 。
Use StudentDB
go
Exec sp_rename 'tblStudent','tbl_Students'
Go
出力は次のとおりです。
Caution: Changing any part of an object name could break scripts and stored procedures.
メッセージは、テーブルの名前が正常に変更されたことを示しています。
次に、SQL ServerManagementStudioを使用してテーブル名を変更する方法を見てみましょう。
SQL Server Management Studio(SSMS)でテーブル名を変更する方法
テーブルの名前を変更するには、SQL ServerManagementStudioを開きます>SQLServerインスタンスに接続>データベースを展開>テーブルを展開>tblSchoolを右クリック>名前を変更 。または、tblSchoolをクリックするだけです。
新しい名前を指定して、 Enterを押します 。
名前を変更したら、次のクエリを実行して確認できます。
ご覧のとおり、テーブルの名前が変更されています。 テーブルの変更日が更新されたことにも注意してください。新しい日付は、テーブルが変更されたときのタイムスタンプです。 。
MSSQLでテーブル名を変更する前に注意すべき点
tblStudentのテーブル名を変更した後 およびtblSchool 、 sp_getstudentという名前のストアドプロシージャを実行してみましょう :
Use StudentDB
Go
Exec sp_getstudent
Go
出力
Msg 208, Level 16, State 1, Procedure sp_getstudent, Line 4 [Batch Start Line 15]
Invalid object name 'tblStudent'.
エラーは、ビューで使用されているオブジェクトが欠落していることを示しています。
次に、次のクエリを実行して、 vwStudentsのデータを表示します。 :
Use StudentDB
Go
Select * from vwStudents
Go
出力
Msg 208, Level 16, State 1, Procedure vwStudents, Line 8 [Batch Start Line 16]
Invalid object name 'tblStudent'.
Msg 4413, Level 16, State 1, Line 17
Could not use view or function 'vwStudents' because of binding errors.
このエラーは、ビューの作成に使用されたクエリで tblStudentという名前のテーブルが見つからないことを示しています。 。
テーブルの名前を変更した後のこのようなエラーを回避するには、テーブルに依存するデータベースオブジェクトのリストを確認する必要があります。
テーブルの名前変更プロセステーブルは次のようになります。
- テーブルの名前を変更します。
- ストアドプロシージャ、ビュー、アドホッククエリ、およびその他のオブジェクトでテーブルの名前を変更します。
特定のテーブルの依存オブジェクトのリストを見つけるには、 sp_dependsを実行します。 ストアドプロシージャ。構文は次のとおりです。
exec sp_depends [obj_name]
tblStudentに依存するオブジェクトのリストを検索するには テーブルで、次のクエリを実行します:
use studentDB
go
exec sp_depends [vwStudents]
出力:
注: テーブルの名前を変更する前に、必ずこの手順を実行してください。それ以外の場合、クエリは出力としてNULLを返します。
概要
この記事では、 sp_renameの使用方法について説明します。 ストアドプロシージャとSQLServer Management Studio テーブルの名前を変更します。さらに、テーブルの名前を変更した後に発生する可能性のある潜在的なエラーと、テーブル名を変更した後に取らなければならない注意事項を定義しました。 SQL Serverのテーブルをより適切に処理するには、SQLServerでdroptableステートメントを使用する方法もお読みください。