Database
 sql >> Database >  >> RDS >> Database

Istruzione SQL DROP TABLE e vari casi d'uso

L'istruzione SQL DROP TABLE serve per eliminare la tabella dal database. Rimuove la tabella, i suoi dati e gli indici ad essa associati. L'affermazione è irreversibile. Pertanto, puoi ripristinare la tabella solo ripristinando il backup.

Questo articolo copre i seguenti casi:

  1. Elimina una o più tabelle.
  2. Elimina la tabella utilizzata in una vista.
  3. Elimina la tabella con una chiave esterna.
  4. Elimina la tabella con indici cluster e non cluster.
  5. Elimina la tabella dall'impostazione della replica.

La sintassi dell'istruzione DROP TABLE è la seguente:

IF EXISTS DROP TABLE [DatabaseName].[SchemaName].[TableName]

Nota:se utilizzi SQL Server 2016 e versioni successive, puoi specificare IF EXISTS prima della TAVELLA A CADUTA dichiarazione.

Inoltre, si specifica il nome della tabella dopo l'istruzione DROP TABLE. Il formato del nome della tabella deve essere [Nome database].[Nome schema].[Nome tabella].

Un semplice esempio dell'istruzione DROP TABLE

Per la dimostrazione, ho ripristinato AdventureWorks2017 database sulla mia workstation. Qui eliminerò i dipendenti tabella.

Utilizza la seguente query utilizzata per eliminare la tabella:

DROP TABLE [AdventureWorks2017].[dbo].[employees]

Ho installato gli strumenti Devart dbForge SQL Complete in SQL Server Management Studio. Quando eseguo un'istruzione SQL DROP TABLE, viene visualizzata una finestra di dialogo di conferma, come mostrato di seguito:

Fai clic su Esegui comunque . La tabella viene eliminata.

Per verificare, esegui la seguente query:

SELECT * FROM dbo. employee

Se ha eliminato la tabella correttamente, riceverai il seguente errore:

Msg 208, Level 16, State 1, Line 1
Invalid object name 'dbo.employee'.

Rilascia la tabella utilizzata in una vista

Qui, proveremo a eliminare una tabella utilizzata in una vista del database. Esegui lo script seguente per creare una vista denominata vPerson :

CREATE VIEW vPerson 
AS
SELECT * FROM Person p

Esegui il DROP TABLE comando per rimuovere la Persona tabella:

DROP TABLE [AdventureWorks2017].[dbo].[person]

Una volta eliminata la tabella, esegui la query SELECT per popolare i dati da vPerson . Verrà visualizzato un errore:

Msg 208, Level 16, State 1, Procedure vPerson, Line 3 [Batch Start Line 0]
Invalid object name 'Person'.
Msg 4413, Level 16, State 1, Line 1
Could not use the view or function 'vPerson' because of binding errors.

Questo errore si verifica quando l'oggetto da cui dipende la vista viene eliminato.

Elimina la tabella con una chiave esterna

Se hai creato una chiave esterna su una tabella, non puoi eliminare la tabella padre prima di eliminare la tabella figlio. Significa che devi prima eliminare la tabella figlio o la chiave esterna che fa riferimento alla tabella figlio.

Ci sono due tabelle denominate tblstudent e tblSchool – il diagramma ER è il seguente:

Nota :sto usando dbForge Studio per SQL Server 2019 per creare un diagramma di database:fornisce informazioni appropriate sulla struttura della tabella con tutti i suoi elementi e sulla relazione tra entità tra le tabelle.

La query seguente crea le tabelle denominate tblstudent e tblSchool e le loro chiavi primarie e chiavi esterne:

CREATE TABLE tblSchool
(
	SchoolID INT identity(1,1),
	SchoolName VARCHAR(500),
	City varchar(250),
	CONSTRAINT PK_SchoolID PRIMARY KEY  (SchoolID)  
)
GO
CREATE TABLE tblStudent
(
StudentID INT IDENTITY(1,1) ,
StudentName VARCHAR(250),
StudentGrade CHAR(1),
SchoolID INT,
CONSTRAINT PK_StudentID PRIMARY KEY  (StudentID),
Constraint FK_SchoolID FOREIGN KEY (SchoolID) REFERENCES tblSchool (SchoolID)
)
GO

Esegui la seguente query per eliminare tblstudent tabella:

Drop table [tblSchool]

La query restituisce il seguente errore:

Msg 3726, Level 16, State 1, Line 22
Could not drop object 'tblSchool' because it is referenced by a FOREIGN KEY constraint.

Nella nostra demo, se vuoi abbandonare tblschool tabella, devi eliminare il tblstudent prima il tavolo. Dai un'occhiata alla query per eliminare il tblStudent e tblschool tabella:

Drop table [tblSchool]
Go
Drop table [tblStudent]
Go

È anche possibile eliminare la tabella batch in una singola istruzione DROP TABLE. Eseguire la query come segue:

Drop table [tblSchool], [tblStudent]

Rilascia una tabella con gli indici

Osserviamo un altro scenario del comportamento dell'istruzione DROP TABLE. Supponiamo di aver creato una tabella denominata tblstudent. Ha un indice cluster e uno non cluster.

Quando eliminiamo una tabella usando DROP TABLE, rimuove gli indici? Controlliamolo. Ho creato una tabella denominata tblStudent che ha un indice cluster e uno non cluster. La query è la seguente:

CREATE TABLE tblStudent
(
StudentID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
StudentName VARCHAR(250),
StudentGrade CHAR(1),
SchoolID INT
)
GO
CREATE NONCLUSTERED INDEX IDX_tblStudent_StudentName ON tblStudent(StudentName) 
GO

Possiamo vedere l'elenco degli indici interrogando sys.indexes Motorizzazione.

Una volta eliminata la tabella, esegui la seguente query:

SELECT Object_name(object_id) AS [Table Name],
       NAME                   AS [Index Name],
       type_desc              [Index Type]
FROM   sys.indexes
WHERE  object_id = Object_id('tblStudent')  

Uscita:

Come puoi vedere, abbiamo creato gli indici cluster e non cluster per tblStudent tabella.

Ora, esegui il seguente comando per eliminare la tabella:

Drop table tblStudent

Ancora una volta, esegui la stessa query che abbiamo usato per popolare l'elenco degli indici:

SELECT Object_name(object_id) AS [Table Name],
       NAME                   AS [Index Name],
       type_desc              [Index Type]
FROM   sys.indexes
WHERE  object_id = Object_id('tblStudent')  

Uscita:

Lo screenshot sopra mostra che la query ha restituito un set di risultati vuoto. Pertanto, quando eliminiamo una tabella, vengono eliminati anche gli indici associati a quella tabella.

Elimina una tabella dalla replica

Si supponga di voler eliminare la tabella che fa parte della replica. In questo caso, devi eseguire ulteriori passaggi.

Ho configurato la replica tra le due istanze di SQL Server 2019 denominate SQL01 e SQL02. Successivamente, ho replicato il tblStudent e tblSchool tabelle.

Eliminiamo la tabella tblSchool da SQL01 eseguendo la seguente query:

use codingsight
go
drop table tblSchool

Uscita:

Msg 3724, Level 16, State 3, Line 3
Cannot drop the table 'tblSchool' because it is being used for replication.

L'errore di cui sopra è esplicativo. Per eliminare la tabella, dobbiamo prima rimuoverla dalla replica:

  1. Apri SQL Server Management Studio e connettiti a SQL01.
  2. Espandi Replica -> Espandi Pubblicazione locale .
  3. Fai clic con il pulsante destro del mouse su Pubblicazione e seleziona Proprietà .

Nelle Proprietà della pubblicazione finestra, fare clic su Articoli .

Lì puoi vedere l'elenco delle tabelle. Deseleziona la tblSchool tabella e fare clic su OK .

Nota: Quando elimini l'articolo dalla replica, gli snapshot precedenti non sono più validi. Devi generare una nuova istantanea dopo aver eliminato l'articolo.

Dopo aver rimosso la tabella dalla replica, eseguire la DROP TABLE comando su SQL01 :

use codingsight
go
drop table tblSchool

Uscita:

Come puoi vedere, la tabella è stata abbandonata.