En af de mest kritiske databaseadministrators opgaver er at administrere databaseobjekter. For eksempel ændres applikationslogikken, og DBA'er skal muligvis ændre databaseobjektnavnene. Denne opgave er afgørende, fordi vi skal sikre, at omdøbning ikke ødelægger applikationen.
Jeg har for nylig fået tildelt et projekt, hvor jeg skulle omdøbe et par borde. Her vil jeg forklare, hvordan man omdøber en SQL Server-tabel på flere måder.
Vi kan omdøbe en tabel ved hjælp af:
- SQL Server Management Studio.
- sp_rename gemt procedure.
Jeg vil også dække potentielle fejl, der kan opstå efter omdøbning af tabeller og de nødvendige forholdsregler. Denne artikel er demo-orienteret, så jeg har oprettet følgende objekter på SQL Server-instansen:
- Databasen med navnet StudentDB .
- To tabeller med navnet tblSchool og tblStudent .
- En fremmednøgle mellem tblSchool og tblStudent . tblSkolen er en overordnet tabel og tblStudent er et børnebord.
- En lagret procedure med navnet sp_getStudents .
- En visning med navnet vwStudents .
T-SQL-koderne anvendt til at oprette ovenstående databaseobjekter er som følger:
Opret database:
Create database [StudentDB]
Go
Opret en tabel og fremmednøgler:
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 over tblSchool og tblStudent:
Indsæt dummy-data i tabellen:
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
Opret en lagret procedure:
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
Opret en visning:
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
Omdøb et tabelnavn ved hjælp af kommandoen sp_rename
Vi kan bruge sp_rename lagret procedure til at omdøbe ethvert objekt i SQL Server-databasen (må ikke forveksles med alter table sql server-operatør, som ændrer data i tabeller). Syntaksen er som følger:
Exec sp_rename ‘schema_name.old_name’,’schema_name.new_name’
- Skema_navn.gammelt_navn er navnet på den tabel, du vil ændre.
- Skema_navn.nyt_navn er det nye navn.
Lad os nu omdøbe tblStudenten tabel til tbl_Students .
Use StudentDB
go
Exec sp_rename 'tblStudent','tbl_Students'
Go
Outputtet er:
Caution: Changing any part of an object name could break scripts and stored procedures.
Meddelelsen angiver, at navnet på tabellen er blevet ændret.
Lad os nu se, hvordan vi kan ændre tabelnavnet ved hjælp af SQL Server Management studio.
Sådan ændres tabelnavn i SQL Server Management Studio (SSMS)
For at omdøbe en tabel skal du åbne SQL Server Management Studio> Opret forbindelse til SQL Server-instans> Udvid database> Udvid tabeller> Højreklik på tblSchool> Omdøb . Eller klik bare på tblSchool.
Angiv det nye navn, og tryk på Enter .
Når navnet er ændret, kan du køre følgende forespørgsel for at bekræfte:
Som du kan se, er navnet på tabellen blevet ændret. Bemærk også, at tabellens ændrede dato er blevet opdateret, og den nye dato er tidsstemplet, når tabellen ændres .
Ting at passe på, før du ændrer tabelnavnet i MSSQL
Efter at have ændret tabelnavnene på tblStudent og tblSchool , lad os køre den lagrede procedure med navnet sp_getstudent :
Use StudentDB
Go
Exec sp_getstudent
Go
Output
Msg 208, Level 16, State 1, Procedure sp_getstudent, Line 4 [Batch Start Line 15]
Invalid object name 'tblStudent'.
Fejlen indikerer, at objektet, der bruges i visningen, mangler.
Lad os nu køre følgende forespørgsel for at se dataene fra vwStudents :
Use StudentDB
Go
Select * from vwStudents
Go
Output
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.
Fejlen indikerer, at forespørgslen, der blev brugt til at oprette en visning, ikke kan finde tabellerne med navnet tblStudent .
For at undgå sådanne fejl efter at have ændret tabellens navn, skal vi tjekke listen over databaseobjekter, der er afhængige af tabellerne.
Tabellen omdøbningsproces skal være som følger:
- Skift navnet på tabellen.
- Skift navnet på tabellen i den lagrede procedure, visninger, ad-hoc-forespørgsler og andre objekter.
For at finde listen over de afhængige objekter på den specifikke tabel kan du køre sp_depends gemt procedure. Syntaksen er:
exec sp_depends [obj_name]
For at finde listen over objekter, der er afhængige af tblStudent tabel, skal du køre følgende forespørgsel:
use studentDB
go
exec sp_depends [vwStudents]
Output:
Bemærk: Sørg for at køre denne procedure, før du omdøber tabellen. Ellers vil forespørgslen returnere NULL som output.
Oversigt
Denne artikel forklarer, hvordan vi kan bruge sp_rename lagret procedure og SQL Server Management Studio for at ændre tabellens navn. Desuden har vi defineret potentielle fejl, der kan opstå efter omdøbning af tabellerne og de forholdsregler, der skal tages efter ændring af tabelnavnene. For bedre at kunne håndtere tabeller i SQL-serveren, læs også, hvordan du bruger drop table-sætning i sql-serveren.