Database
 sql >> Baza danych >  >> RDS >> Database

Instrukcja SQL DROP TABLE i różne przypadki użycia

Instrukcja SQL DROP TABLE służy do usunięcia tabeli z bazy danych. Usuwa tabelę i powiązane z nią dane oraz indeksy. Oświadczenie jest nieodwracalne. Dlatego możesz przywrócić tabelę tylko przez przywrócenie kopii zapasowej.

W tym artykule omówiono następujące przypadki:

  1. Usuń jedną lub wiele tabel.
  2. Usuń tabelę używaną w widoku.
  3. Usuń tabelę z kluczem obcym.
  4. Usuń tabelę z indeksami klastrowymi i nieklastrowymi.
  5. Usuń tabelę z ustawień replikacji.

Składnia instrukcji DROP TABLE jest następująca:

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

Uwaga:jeśli używasz SQL Server 2016 lub nowszego, możesz określić JEŻELI ISTNIEJE przed DROP TABLE oświadczenie.

Ponadto określasz nazwę tabeli po instrukcji DROP TABLE. Format nazwy tabeli powinien mieć postać [Nazwa bazy danych].[Nazwa schematu].[Nazwa tabeli].

Prosty przykład instrukcji DROP TABLE

Na potrzeby demonstracji przywróciłem AdventureWorks2017 bazy danych na mojej stacji roboczej. Tutaj usunę pracowników tabela.

Użyj następującego zapytania użytego do usunięcia tabeli:

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

Zainstalowałem narzędzia Devart dbForge SQL Complete w SQL Server Management Studio. Kiedy wykonuję instrukcję SQL DROP TABLE, wyświetla się okno dialogowe potwierdzenia, jak pokazano poniżej:

Kliknij Wykonaj mimo to . Tabela została usunięta.

Aby zweryfikować, uruchom następujące zapytanie:

SELECT * FROM dbo. employee

Jeśli pomyślnie upuścił tabelę, pojawi się następujący błąd:

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

Upuść tabelę używaną w widoku

Tutaj spróbujemy usunąć tabelę używaną w widoku bazy danych. Wykonaj następujący skrypt, aby utworzyć widok o nazwie vPerson :

CREATE VIEW vPerson 
AS
SELECT * FROM Person p

Uruchom DROP TABLE polecenie, aby usunąć osobę tabela:

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

Po usunięciu tabeli uruchom zapytanie SELECT, aby wypełnić dane z vPerson . Spowoduje to błąd:

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.

Ten błąd występuje, gdy obiekt, od którego zależny jest widok, zostaje usunięty.

Upuść tabelę z kluczem obcym

Jeśli utworzyłeś klucz obcy w tabeli, nie możesz usunąć tabeli nadrzędnej przed usunięciem tabeli podrzędnej. Oznacza to, że musisz najpierw usunąć tabelę podrzędną lub klucz obcy, który odwołuje się do tabeli podrzędnej.

Istnieją dwie tabele o nazwie tblstudent i tblSchool – schemat ER wygląda następująco:

Uwaga :używam dbForge Studio dla SQL Server 2019 stworzyć diagram bazy danych – daje to odpowiedni wgląd w strukturę tabeli ze wszystkimi jej elementami oraz relacje encji między tabelami.

Poniższe zapytanie tworzy tabele o nazwie tblstudent i tblSchool oraz ich klucze podstawowe i obce:

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

Uruchom następujące zapytanie, aby usunąć tablicę studenta tabela:

Drop table [tblSchool]

Zapytanie zwraca następujący błąd:

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

W naszym demo, jeśli chcesz porzucić tblschool tabeli, musisz usunąć tblstudent pierwszy stół. Spójrz na zapytanie, aby usunąć tblStudent i tblschool tabela:

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

Możliwe jest również usunięcie tabeli wsadowej za pomocą pojedynczej instrukcji DROP TABLE. Uruchom zapytanie w następujący sposób:

Drop table [tblSchool], [tblStudent]

Upuść tabelę z indeksami

Przyjrzyjmy się kolejnemu scenariuszowi zachowania instrukcji DROP TABLE. Załóżmy, że utworzyliśmy tabelę o nazwie tblstudent. Ma indeks klastrowy i nieklastrowany.

Kiedy usuwamy tabelę za pomocą DROP TABLE, czy usuwa to indeksy? Sprawdźmy to. Utworzyłem tabelę o nazwie tblStudent który ma jeden indeks klastrowany i jeden nieklastrowany. Zapytanie jest następujące:

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

Listę indeksów możemy zobaczyć, sprawdzając sys.indexes DMV.

Po upuszczeniu tabeli uruchom następujące zapytanie:

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')  

Wyjście:

Jak widać, utworzyliśmy zarówno indeksy klastrowe, jak i nieklastrowe dla tblStudent tabela.

Teraz uruchom następujące polecenie, aby usunąć tabelę:

Drop table tblStudent

Ponownie uruchom to samo zapytanie, którego użyliśmy do wypełnienia listy indeksów:

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')  

Wyjście:

Powyższy zrzut ekranu ilustruje, że zapytanie zwróciło pusty zestaw wyników. Tak więc, kiedy usuniemy tabelę, odrzucą również indeksy związane z tą tabelą.

Usuń tabelę z replikacji

Załóżmy, że chcesz usunąć tabelę, która jest częścią replikacji. W takim przypadku musisz wykonać dodatkowe czynności.

Skonfigurowałem replikację między dwoma instancjami SQL Server 2019 nazwanymi SQL01 i SQL02. Następnie odtworzyłem tblStudent i tblSchool tabele.

Usuwamy tabelę tblSchool z SQL01, wykonując następujące zapytanie:

use codingsight
go
drop table tblSchool

Wyjście:

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

Powyższy błąd jest objaśniający. Aby usunąć tabelę, musimy najpierw usunąć ją z replikacji:

  1. Otwórz SQL Server Management Studio i połącz się z SQL01.
  2. Rozwiń Replikacja -> Rozwiń Publikacja lokalna .
  3. Kliknij prawym przyciskiem myszy Publikacja i wybierz Właściwości .

W Właściwościach publikacji kliknij Artykuły .

Tam możesz zobaczyć listę stołów. Odznacz tblSchool tabeli i kliknij OK .

Uwaga: Po usunięciu artykułu z replikacji poprzednie migawki stają się nieważne. Po upuszczeniu artykułu musisz wygenerować nowy zrzut.

Po usunięciu tabeli z replikacji wykonaj DROP TABLE polecenie na SQL01 :

use codingsight
go
drop table tblSchool

Wyjście:

Jak widać, tabela została usunięta.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Śledzenie zmian w bazie danych za pomocą kontroli źródła folderu roboczego

  2. Złożoność NULL – Część 4, Brak standardowego unikalnego ograniczenia

  3. Używanie tabel konfiguracji do definiowania rzeczywistego przepływu pracy

  4. Konstruowanie modelu danych dla systemu zarządzania parkingami

  5. Porównywanie obiektów według wartości. Część 6:Wdrażanie równości struktury