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:
- Exclua uma ou várias tabelas.
- Exclua a tabela usada em uma visualização.
- Exclua a tabela com uma chave estrangeira.
- Exclua a tabela com índices clusterizados e não clusterizados.
- 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:
- Abra o SQL Server Management Studio e conecte-se ao SQL01.
- Expandir Replicação -> Expandir Publicação local .
- 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.