sql >> Base de Datos >  >> RDS >> Database

Declaración SQL DROP TABLE y varios casos de uso

La instrucción SQL DROP TABLE sirve para eliminar la tabla de la base de datos. Elimina la tabla y sus datos e índices asociados a ella. La declaración es irreversible. Por lo tanto, puede restaurar la tabla solo restaurando la copia de seguridad.

Este artículo cubre los siguientes casos:

  1. Eliminar una o varias tablas.
  2. Eliminar la tabla utilizada en una Vista.
  3. Eliminar la tabla que tiene una clave externa.
  4. Elimine la tabla que tiene índices agrupados y no agrupados.
  5. Elimine la tabla de la configuración de replicación.

La sintaxis de la sentencia DROP TABLE es la siguiente:

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

Nota:si usa SQL Server 2016 y superior, puede especificar SI EXISTE antes de la TABLA DE DESCARGA declaración.

Además, especifica el nombre de la tabla después de la instrucción DROP TABLE. El formato del nombre de la tabla debe ser [Nombre de la base de datos].[Nombre del esquema].[Nombre de la tabla].

Un ejemplo simple de la sentencia DROP TABLE

Para la demostración, he restaurado el AdventureWorks2017 base de datos en mi estación de trabajo. Aquí, voy a eliminar los empleados mesa.

Use la siguiente consulta para soltar la tabla:

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

He instalado las herramientas Devart dbForge SQL Complete en SQL Server Management Studio. Cuando ejecuto una instrucción SQL DROP TABLE, aparece un cuadro de diálogo de confirmación, como se muestra a continuación:

Haga clic en Ejecutar de todos modos . La mesa se cae.

Para verificar, ejecute la siguiente consulta:

SELECT * FROM dbo. employee

Si eliminó la tabla con éxito, recibirá el siguiente error:

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

Soltar la tabla utilizada en una vista

Aquí, intentaremos eliminar una tabla utilizada en una vista de base de datos. Ejecute el siguiente script para crear una vista llamada vPerson :

CREATE VIEW vPerson 
AS
SELECT * FROM Person p

Ejecute DROP TABLE comando para eliminar la Persona tabla:

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

Una vez que se haya eliminado la tabla, ejecute la consulta SELECT para completar los datos de vPerson . Producirá un error:

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 error se produce cuando se descarta el objeto del que depende la vista.

Eliminar la tabla que tiene una clave externa

Si ha creado una clave externa en una tabla, no puede descartar la tabla principal antes de descartar la tabla secundaria. Significa que primero debe eliminar la tabla secundaria o la clave externa que hace referencia a la tabla secundaria.

Hay dos tablas llamadas tblstudent y tblSchool – el diagrama ER es el siguiente:

Nota :estoy usando dbForge Studio para SQL Server 2019 para crear un diagrama de base de datos:brinda una visión adecuada de la estructura de la tabla con todos sus elementos y la entidad-relación entre las tablas.

La siguiente consulta crea las tablas denominadas tblstudent y tblSchool y sus claves primarias y claves foráneas:

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

Ejecute la siguiente consulta para eliminar el tblstudent tabla:

Drop table [tblSchool]

La consulta devuelve el siguiente error:

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

En nuestra demostración, si desea eliminar tblschool tabla, debe eliminar el tblstudent mesa primero. Eche un vistazo a la consulta para eliminar el tblStudent y tblschool tabla:

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

También es posible descartar la tabla de lotes en una sola instrucción DROP TABLE. Ejecute la consulta de la siguiente manera:

Drop table [tblSchool], [tblStudent]

Soltar una tabla con índices

Observemos otro escenario del comportamiento de la instrucción DROP TABLE. Supongamos que hemos creado una tabla llamada tblstudent. Tiene un índice agrupado y no agrupado.

Cuando soltamos una tabla usando DROP TABLE, ¿elimina los índices? Vamos a comprobarlo. Creé una tabla llamada tblStudent que tiene un índice agrupado y otro no agrupado. La consulta es la siguiente:

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 la lista de índices consultando sys.indexes DMV.

Una vez que se haya eliminado la tabla, ejecute la siguiente 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')  

Salida:

Como puede ver, hemos creado índices agrupados y no agrupados para tblStudent mesa.

Ahora, ejecute el siguiente comando para eliminar la tabla:

Drop table tblStudent

Nuevamente, ejecute la misma consulta que usamos para completar la 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')  

Salida:

La captura de pantalla anterior muestra que la consulta devolvió un conjunto de resultados vacío. Por lo tanto, cuando descartamos una tabla, también elimina los índices asociados con esa tabla.

Eliminar una tabla de la replicación

Suponga que desea descartar la tabla que forma parte de la replicación. En este caso, debe realizar pasos adicionales.

Configuré la replicación entre las dos instancias de SQL Server 2019 llamadas SQL01 y SQL02. A continuación, he replicado el tblStudent y tblSchool mesas.

Quitamos la tabla tblSchool del SQL01 ejecutando la siguiente consulta:

use codingsight
go
drop table tblSchool

Salida:

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

El error anterior es explicativo. Para descartar la tabla, primero debemos eliminarla de la replicación:

  1. Abra SQL Server Management Studio y conéctese a SQL01.
  2. Expandir Replicación -> Expandir Publicación local .
  3. Haga clic derecho en Publicación y seleccione Propiedades .

En las Propiedades de la publicación ventana, haga clic en Artículos .

Allí, puede ver la lista de tablas. Desmarque tblSchool tabla y haga clic en Aceptar .

Nota: Cuando elimina el artículo de la replicación, las instantáneas anteriores dejan de ser válidas. Debe generar una nueva instantánea después de soltar el artículo.

Una vez que la tabla se elimine de la replicación, ejecute DROP TABLE comando en SQL01 :

use codingsight
go
drop table tblSchool

Salida:

Como puede ver, la tabla se ha caído.