Jednou z nejdůležitějších povinností správce databáze je správa databázových objektů. Například se změní aplikační logika a správci databází možná budou muset změnit názvy databázových objektů. Tento úkol je klíčový, protože musíme zajistit, že přejmenování nezničí aplikaci.
Nedávno mi byl přidělen projekt, kde jsem musel přejmenovat několik tabulek. Zde vysvětlím, jak přejmenovat tabulku SQL Server několika způsoby.
Tabulku můžeme přejmenovat pomocí:
- Studio pro správu serveru SQL.
- sp_rename uložená procedura.
Také se budu zabývat potenciálními chybami, které mohou nastat po přejmenování tabulek, a nezbytnými opatřeními. Tento článek je zaměřen na ukázku, takže jsem v instanci SQL Server vytvořil následující objekty:
- Databáze s názvem StudentDB .
- Dvě tabulky s názvem tblSchool a tblStudent .
- Cizí klíč mezi tblSchool a tblStudent . Škola tblSchool je nadřazená tabulka a tblStudent je dětská tabulka.
- Uložená procedura s názvem sp_getStudents .
- Výhled s názvem vwStudents .
Kódy T-SQL použité k vytvoření výše uvedených databázových objektů jsou následující:
Vytvořit databázi:
Create database [StudentDB]
Go
Vytvoření tabulky a cizích klíčů:
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 diagram tblSchool a tblStudent:
Vložte do tabulky fiktivní data:
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
Vytvořte uloženou proceduru:
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
Vytvoření zobrazení:
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
Přejmenujte název tabulky pomocí příkazu sp_rename
Můžeme použít sp_rename uložená procedura pro přejmenování libovolného objektu databáze SQL Server (neplést s operátorem alter table sql server, který mění data v tabulkách). Syntaxe je následující:
Exec sp_rename ‘schema_name.old_name’,’schema_name.new_name’
- Schema_name.old_name je název tabulky, kterou chcete změnit.
- Schema_name.new_name je nové jméno.
Nyní přejmenujme tblStudent tabulky na tbl_Students .
Use StudentDB
go
Exec sp_rename 'tblStudent','tbl_Students'
Go
Výstup je:
Caution: Changing any part of an object name could break scripts and stored procedures.
Zpráva znamená, že název tabulky byl úspěšně změněn.
Nyní se podívejme, jak můžeme změnit název tabulky pomocí SQL Server Management Studio.
Jak změnit název tabulky v SQL Server Management Studio (SSMS)
Chcete-li přejmenovat tabulku, otevřete SQL Server Management Studio> Připojit k instanci SQL Server> Rozbalit databázi> Rozbalit tabulky> Klikněte pravým tlačítkem na tblSchool> Přejmenovat . Nebo stačí kliknout na tblSchool.
Zadejte nový název a stiskněte Enter .
Po změně názvu můžete spustit následující dotaz pro ověření:
Jak vidíte, název tabulky byl změněn. Všimněte si také, že datum úpravy tabulky bylo aktualizováno a nové datum je časové razítko při úpravě tabulky .
Na co si dát pozor, než změníte název tabulky v MSSQL
Po změně názvů tabulek tblStudent a tblSchool , spusťte uloženou proceduru s názvem sp_getstudent :
Use StudentDB
Go
Exec sp_getstudent
Go
Výstup
Msg 208, Level 16, State 1, Procedure sp_getstudent, Line 4 [Batch Start Line 15]
Invalid object name 'tblStudent'.
Chyba označuje, že objekt použitý v zobrazení chybí.
Nyní spustíme následující dotaz a zobrazíme data z vwStudents :
Use StudentDB
Go
Select * from vwStudents
Go
Výstup
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.
Chyba znamená, že dotaz použitý k vytvoření pohledu nemůže najít tabulky s názvem tblStudent .
Abychom se takovým chybám po změně názvu tabulky vyhnuli, musíme zkontrolovat seznam databázových objektů, které jsou na tabulkách závislé.
Tabulka procesu přejmenování tabulky by měla vypadat následovně:
- Změňte název tabulky.
- Změňte název tabulky v Uložené proceduře, pohledech, dotazech Ad-Hoc a dalších objektech.
Chcete-li najít seznam závislých objektů na konkrétní tabulce, můžete spustit sp_depends uložené procedury. Syntaxe je:
exec sp_depends [obj_name]
Chcete-li najít seznam objektů závislých na tblStudent tabulky, spusťte následující dotaz:
use studentDB
go
exec sp_depends [vwStudents]
Výstup:
Poznámka: Ujistěte se, že jste tento postup spustili před přejmenováním tabulky. Jinak dotaz vrátí jako výstup hodnotu NULL.
Shrnutí
Tento článek vysvětluje, jak můžeme použít sp_rename uložená procedura a SQL Server Management Studio změnit název tabulky. Kromě toho jsme definovali potenciální chyby, které mohou nastat po přejmenování tabulek, a opatření, která je třeba přijmout po změně názvů tabulek. Chcete-li si lépe poradit s tabulkami na serveru SQL, přečtěte si také, jak používat příkaz drop table na serveru SQL.