Database
 sql >> Base de Dados >  >> RDS >> Database

Instrução SQL DROP TABLE e vários casos de uso


A instrução SQL DROP TABLE serve para eliminar a tabela do banco de dados. Ele remove a tabela e seus dados e índices associados a ela. A afirmação é irreversível. Assim, você pode restaurar a tabela apenas restaurando o backup.

Este artigo abrange os seguintes casos:
  1. Exclua uma ou várias tabelas.
  2. Exclua a tabela usada em uma visualização.
  3. Exclua a tabela com uma chave estrangeira.
  4. Exclua a tabela com índices clusterizados e não clusterizados.
  5. Exclua a tabela da configuração de replicação.

A sintaxe da instrução DROP TABLE é a seguinte:
IF EXISTS DROP TABLE [DatabaseName].[SchemaName].[TableName]

Observação:se você estiver usando o SQL Server 2016 e superior, poderá especificar IF EXISTS antes da DROP TABLE demonstração.

Além disso, você especifica o nome da tabela após a instrução DROP TABLE. O formato do nome da tabela deve ser [Nome do banco de dados].[Nome do esquema].[Nome da tabela].

Um exemplo simples da instrução DROP TABLE


Para a demonstração, restaurei o AdventureWorks2017 banco de dados na minha estação de trabalho. Aqui, vou excluir os funcionários tabela.

Use a seguinte consulta usada para descartar a tabela:
DROP TABLE [AdventureWorks2017].[dbo].[employees]

Instalei as ferramentas Devart dbForge SQL Complete no SQL Server Management Studio. Quando executo uma instrução SQL DROP TABLE, ela exibe uma caixa de diálogo de confirmação, conforme mostrado abaixo:

Clique em Executar mesmo assim . A mesa é descartada.

Para verificar, execute a seguinte consulta:
SELECT * FROM dbo. employee

Se ele descartou a tabela com sucesso, você receberá o seguinte erro:
Msg 208, Level 16, State 1, Line 1
Invalid object name 'dbo.employee'.

Solte a tabela usada em uma visualização


Aqui, tentaremos eliminar uma tabela usada em uma visualização de banco de dados. Execute o script a seguir para criar uma visualização chamada vPerson :
CREATE VIEW vPerson 
AS
SELECT * FROM Person p

Execute a DROP TABLE comando para remover a Pessoa tabela:
DROP TABLE [AdventureWorks2017].[dbo].[person]

Depois que a tabela for descartada, execute a consulta SELECT para preencher os dados de vPerson . Ele irá produzir um erro:
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.

Este erro ocorre quando o objeto do qual a exibição é dependente é descartado.

Retire a tabela com uma chave estrangeira


Se você criou uma chave estrangeira em uma tabela, não poderá eliminar a tabela pai antes de eliminar a tabela filho. Isso significa que você deve descartar a tabela filho ou a chave estrangeira que faz referência à tabela filho primeiro.

Existem duas tabelas chamadas tblstudent e tblSchool – o diagrama ER é o seguinte:

Observação :Estou usando dbForge Studio para SQL Server 2019 para criar um diagrama de banco de dados – fornece informações adequadas sobre a estrutura da tabela com todos os seus elementos e relação de entidade entre as tabelas.

A consulta a seguir cria as tabelas chamadas tblstudent e tblSchool e suas chaves primárias e chaves estrangeiras:
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

Execute a seguinte consulta para eliminar o tblstudent tabela:
Drop table [tblSchool]

A consulta retorna o seguinte erro:
Msg 3726, Level 16, State 1, Line 22
Could not drop object 'tblSchool' because it is referenced by a FOREIGN KEY constraint.

Em nossa demonstração, se você quiser abandonar a tblschool tabela, você deve eliminar o tblstudent mesa primeiro. Dê uma olhada na consulta para descartar o tblStudent e tblschool tabela:
Drop table [tblSchool]
Go
Drop table [tblStudent]
Go

Também é possível eliminar a tabela de lotes em uma única instrução DROP TABLE. Execute a consulta da seguinte forma:
Drop table [tblSchool], [tblStudent]

Solte uma tabela com índices


Vamos observar outro cenário do comportamento da instrução DROP TABLE. Suponha que criamos uma tabela chamada tblstudent. Ele tem um índice clusterizado e um não clusterizado.

Quando descartamos uma tabela usando DROP TABLE, ela remove os índices? Vamos verificar. Eu criei uma tabela chamada tblStudent que tem um índice clusterizado e um não clusterizado. A consulta é a seguinte:
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

Podemos ver a lista dos índices consultando o sys.indexes DMV.

Depois que a tabela for descartada, execute a seguinte consulta:
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')  

Saída:

Como você pode ver, criamos os índices clusterizados e não clusterizados para o tblStudent tabela.

Agora, execute o seguinte comando para excluir a tabela:
Drop table tblStudent

Novamente, execute a mesma consulta que usamos para preencher a lista de índices:
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')  

Saída:

A captura de tela acima ilustra que a consulta retornou um conjunto de resultados vazio. Assim, quando descartamos uma tabela, ela também descarta os índices associados a essa tabela.

Retire uma tabela da Replicação


Suponha que você queira eliminar a tabela que faz parte da replicação. Nesse caso, você deve executar etapas adicionais.

Configurei a replicação entre as duas instâncias do SQL Server 2019 denominadas SQL01 e SQL02. Em seguida, repliquei o tblStudent e tblSchool mesas.

Eliminamos a tabela tblSchool do SQL01 executando a seguinte consulta:
use codingsight
go
drop table tblSchool

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

O erro acima é explicativo. Para descartar a tabela, devemos primeiro removê-la da replicação:
  1. Abra o SQL Server Management Studio e conecte-se ao SQL01.
  2. Expandir Replicação -> Expandir Publicação local .
  3. Clique com o botão direito do mouse em Publicação e selecione Propriedades .

Nas Propriedades da publicação janela, clique em Artigos .

Lá, você pode ver a lista de tabelas. Desmarque a tblSchool tabela e clique em OK .

Observação: Quando você descarta o artigo da replicação, os instantâneos anteriores se tornam inválidos. Você deve gerar um novo instantâneo após soltar o artigo.

Depois que a tabela for removida da replicação, execute o comando DROP TABLE comando em SQL01 :
use codingsight
go
drop table tblSchool

Saída:

Como você pode ver, a tabela foi descartada.