Едно от най-критичните задължения на администратора на база данни е управлението на обекти на база данни. Например, логиката на приложението се променя и DBA може да се наложи да променят имената на обектите на базата данни. Тази задача е от решаващо значение, защото трябва да гарантираме, че преименуването няма да наруши приложението.
Наскоро ми беше назначен проект, в който трябваше да преименувам няколко таблици. Тук ще обясня как да преименувате таблица на SQL Server по няколко начина.
Можем да преименуваме таблица с помощта на:
- Студио за управление на SQL Server.
- sp_rename съхранена процедура.
Също така ще разгледам потенциалните грешки, които могат да възникнат след преименуване на таблици и необходимите предпазни мерки. Тази статия е демо-ориентирана, така че създадох следните обекти в екземпляра на SQL Server:
- База данни с име StudentDB .
- Две таблици с име tblSchool иtblStudent .
- Външен ключ между tblSchool иtblStudent . ThetblSchool е родителска таблица, а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
E-R диаграма на tblSchool и tblStudent:
Вмъкнете фиктивни данни в таблицата:
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 сървър, който променя данните в таблици). Синтаксисът е следният:
Exec sp_rename ‘schema_name.old_name’,’schema_name.new_name’
- Schema_name.old_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 Server Management Studio.
Как да промените името на таблицата в SQL Server Management Studio (SSMS)
За да преименувате таблица, отворете SQL Server Management Studio> Свързване с екземпляр на SQL Server> Разширяване на базата данни> Разгъване на таблици> Щракнете с десния бутон върху 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 .
За да избегнем подобни грешки след промяна на името на таблицата, трябва да проверим списъка на обектите на базата данни, които са зависими от таблиците.
Таблицата на процеса на преименуване на таблицата трябва да бъде както следва:
- Променете името на таблицата.
- Променете името на таблицата в Съхранената процедура, изгледи, Ad-Hoc заявки и други обекти.
За да намерите списъка на зависимите обекти в конкретната таблица, можете да изпълните sp_depends съхранена процедура. Синтаксисът е:
exec sp_depends [obj_name]
За да намерите списъка с обекти, зависими от tblStudent таблица, изпълнете следната заявка:
use studentDB
go
exec sp_depends [vwStudents]
Изход:
Забележка: Уверете се, че изпълнявате тази процедура, преди да преименувате таблицата. В противен случай заявката ще върне NULL като изход.
Резюме
Тази статия обяснява как можем да използваме sp_rename съхранена процедура и SQL Server Management Studio за да промените името на таблицата. Освен това сме дефинирали потенциални грешки, които могат да възникнат след преименуване на таблиците и предпазните мерки, които трябва да предприемете след промяна на имената на таблиците. За да се справите по-добре с таблиците в SQL сървъра, прочетете също как да използвате оператор drop table в sql сървър.