Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zrozumienie instrukcji DROP TABLE w SQL Server

Instrukcja SQL Server DROP TABLE służy do usunięcia tabeli z bazy danych. W tym artykule wyjaśnimy niektóre scenariusze użycia i zilustrujemy działanie instrukcji DROP TABLE na przykładach.

Do demonstracji używamy wideworldimportors demonstracyjna baza danych – możesz ją pobrać stąd.

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

Drop table [Database_name].[Schema_name].[table_name]
  • Nazwa_bazy danych : nazwa bazy danych, z której chcesz usunąć tabelę w SQL.
  • Schema_Name : nazwa schematu, dla którego istnieje tabela. Jeśli utworzyłeś tabelę w schemacie DBO, możemy pominąć ten parametr. Jeśli tabela jest tworzona w schemacie innym niż domyślny, musimy podać nazwę nazwy schematu.
  • Nazwa_tabeli : nazwa tabeli w SQL lub MySQL, którą chcesz usunąć.

Kiedy upuszczamy tabelę, SQL Server wykonuje następujące działania:

  1. Zrzuca tabelę z danymi.
  2. Porzuca statystyki tabeli.
  3. Usuwa indeksy, ograniczenia i klucz podstawowy skojarzony z tą tabelą. Jeśli mamy relacje kluczy obcych, musimy usunąć tabelę podrzędną.

Przed odrzuceniem stołu musimy zadbać o następujące rzeczy.

  1. Upewnij się, że procedury składowane, wyzwalacze i widoki zależne od tej tabeli zostaną zmienione lub zmodyfikowane. Niezbędne obiekty bazy danych możesz znaleźć za pomocą sp_depends procedura składowana.
  2. Zawsze używaj [nazwa_bazy_danych].[nazwa_schematu].[nazwa_tabeli] format, aby upuścić właściwą tabelę.
  3. Pamiętaj, że nie jest możliwe odzyskanie określonej tabeli z kopii zapasowej programu SQL Server. Jeśli chcesz odzyskać określoną tabelę, musisz kupić narzędzia innych firm. Jeśli uważasz, że tabela może wymagać odwołań lub raportów niestandardowych, upewnij się, że generujesz kopię zapasową tabeli, tworząc kolejną kopię.

Konfiguracja wersji demonstracyjnej

W demo Wideworldimportors bazy danych, istnieją tabele o nazwie tblBusinessEntity , tblCountryRegion, tblCity, i tblCustomer .

  • Tabele tblBusinessEntity i tblCustomer są w schemacie domyślnym, natomiast tblCountryRegion i tblCity znajdują się w kraju schemat.
  • tblCity jest tabelą czasową z wersjonowaniem systemu.
  • Ograniczenie klucza obcego znajduje się między tblBusinessEntity i tblCustomer tabele. BusinessEntityID kolumna tblCustomer odniesienia do BusinessEntityID kolumna (klucz podstawowy) tblBusinessEntity stół.

Wstawiłem dane z AdventureWorks2017 bazy danych za pomocą instrukcji INSERT INTO SELECT * FROM.

Skrypty T-SQL do przygotowania konfiguracji demonstracyjnej są następujące:

Use WideworldImportors
go
CREATE SCHEMA [country]
Go

Utwórz tabele:

Use WideworldImportors
go
CREATE TABLE [tblBusinessEntity](
	[BusinessEntityID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
	[ModifiedDate] [datetime] NOT NULL,
 CONSTRAINT [PK_BusinessEntity_BusinessEntityID] PRIMARY KEY CLUSTERED 
([BusinessEntityID] ASC))
GO

CREATE TABLE [Country].[tblCountryRegion](
	[CountryRegionCode] [nvarchar](3) NOT NULL,
	[Name] varchar(500) NOT NULL
 CONSTRAINT [Country].[PK_CountryRegion_CountryRegionCode] PRIMARY KEY CLUSTERED 
([CountryRegionCode] ASC))
GO
CREATE TABLE [tblCustomer](
	[BusinessEntityID] [int] NOT NULL,
	[PersonType] [nchar](2) NOT NULL,
	[NameStyle] varchar(15) NOT NULL,
	[Title] [nvarchar](8) NULL,
	[FirstName] varchar(150) NOT NULL,
	[MiddleName] varchar(150) NULL,
	[LastName] varchar(150) NOT NULL,
	[Suffix] [nvarchar](10) NULL,
	[EmailPromotion] [int] NOT NULL,
	[ModifiedDate] [datetime] NOT NULL,
 CONSTRAINT [PK_Person_BusinessEntityID] PRIMARY KEY CLUSTERED 
([BusinessEntityID] ASC))
GO
CREATE TABLE [Country].[tblCity](
	[CityID] [int] NOT NULL,
	[CityName] [nvarchar](50) NOT NULL,
	[StateProvinceID] [int] NOT NULL,
	[LatestRecordedPopulation] [bigint] NULL,
	[LastEditedBy] [int] NOT NULL,
	[ValidFrom] [datetime2](7) GENERATED ALWAYS AS ROW START NOT NULL,
	[ValidTo] [datetime2](7) GENERATED ALWAYS AS ROW END NOT NULL,
 CONSTRAINT [PK_Country_Cities] PRIMARY KEY CLUSTERED 
(
	[CityID] ASC
),
	PERIOD FOR SYSTEM_TIME ([ValidFrom], [ValidTo])
) ON [USERDATA] TEXTIMAGE_ON [USERDATA]
WITH
(
SYSTEM_VERSIONING = ON ( HISTORY_TABLE = [Country].[City_Archive] )
)
GO

Utwórz indeks klucza obcego:

Use WideworldImportors
go
ALTER TABLE [tblCustomer]  WITH CHECK ADD  CONSTRAINT [FK_Person_BusinessEntity_BusinessEntityID] FOREIGN KEY([BusinessEntityID])
REFERENCES [tblBusinessEntity] ([BusinessEntityID])
GO

Wstaw dane do tabel:

Use WideworldImportors
Go
set identity_insert tblBusinessEntity on
Go
insert into tblBusinessEntity ([BusinessEntityID],[ModifiedDate])
select [BusinessEntityID],[ModifiedDate] from [AdventureWorks2017].[Person].[BusinessEntity]
Go
set identity_insert tblBusinessEntity off
Go
insert into tblCustomer ([BusinessEntityID],[PersonType],[NameStyle],[Title],[FirstName],[MiddleName],[LastName],[Suffix],[EmailPromotion],[ModifiedDate])
select [BusinessEntityID],[PersonType],[NameStyle],[Title],[FirstName],[MiddleName],[LastName],[Suffix],[EmailPromotion],[ModifiedDate] 
from AdventureWorks2017.Person.Person
Go
insert into [Country].[tblCountryRegion]([CountryRegionCode],[Name]) 
select  [CountryRegionCode],[Name] from [AdventureWorks2017].[Person].[CountryRegion]
Go

Po wykonaniu skryptów możemy zweryfikować, czy obiekty zostały utworzone poprawnie i czy dane zostały wstawione do tabel.

Sprawdź tabele:

Use WideWorldImporters
Go
select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME in ('tblCustomer','tblCountryRegion','tblBusinessEntity')
Go

Wyjście:

Uzyskaj liczbę wierszy w tabelach:

Use WideWorldImporters
Go
select object_name(object_id) as [Table Name], rows [Total Rows] from sys.partitions 
where object_id in (object_id('tblCustomer'),object_id('country.tblCountryRegion'),object_id('tblBusinessEntity'))
Go

Wyjście:

Teraz przyjrzyjmy się przykładom użycia DROP TABLE.

Przykład 1:Proste zastosowanie instrukcji DROP TABLE

Czasami podczas pracy ze stołem może wystąpić błąd. Dzieje się tak, gdy użytkownik próbuje UPUŚCIĆ tabelę, która nie istnieje. Jest prosty sposób na uniknięcie tego – używając polecenia SQL DROP TABLE IF EXISTS.

Składnia jest następująca:

-- use database
USE [MyDatabase];
GO

-- attempt to run DROP TABLE only if it exists 
DROP TABLE IF EXISTS [dbo].[MyTable0];
GO

Nie ma potrzeby ręcznego sprawdzania, czy tabela, którą chcesz usunąć, już istnieje, ponieważ polecenie DROP TABLE IF EXITS w SQL zrobi to za Ciebie.

Możesz użyć SQL Server Management Studio (SSMS), jeśli chcesz usunąć wszystkie tabele.

Załóżmy, że chcemy usunąć tblCountryRegion tabela z naszej bazy danych. W tym celu uruchom następujące zapytanie:

use WideWorldImporters
Go
drop table tblCountryRegion

Otrzymujemy błąd:

Msg 3701, Level 11, State 5, Line 3
Cannot drop the table 'tblCountryRegion' because it does not exist 
or you do not have permission.

Jak wspomniano wcześniej, aby usunąć tabelę utworzoną w schemacie innym niż domyślny, musimy napisać instrukcję DROP TABLE w [nazwa_schematu].[nazwa_tabeli] format .

Uruchom następujące zapytanie:

use WideWorldImporters
Go
drop table [country].[tblCountryRegion]

Wyjście:

Commands completed successfully.

Pomyślnie usunęliśmy stół.

Przykład 2:Usuń tabelę z kluczem obcym

Pozbądźmy się tblBusinessEntity z bazy danych – uruchom zapytanie:

use WideWorldImporters
Go
Drop table tblBusinessEntity

Zwraca błąd:

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

Gdy usuwamy tabelę z kluczem obcym, który odwołuje się do klucza podstawowego tabeli nadrzędnej, musimy usunąć tabelę nadrzędną, a następnie możemy usunąć tabelę podrzędną.

W naszym przypadku, aby usunąć tblBusinessEntity tabeli, musimy usunąć tblCustomer stół. Uruchom następujące zapytanie:

use WideWorldImporters
Go
Drop table tblcustomer

W ten sposób tabela została pomyślnie usunięta.

Po odrzuceniu tblcustomer , uruchom następującą instrukcję, aby usunąć tblBusinessEntity tabela:

use WideWorldImporters
Go
Drop table tblBusinessEntity

Wyjście:

Tabela została pomyślnie usunięta.

Przykład 3:Usuń tabelę czasową

Tabele czasowe z wersjami systemowymi pojawiły się po raz pierwszy w programie SQL Server 2016. Tabele te mogą pobierać usunięte i zaktualizowane dane, ponieważ tabela historii śledzi zmiany, które wystąpiły w tabeli danych tymczasowych. Więcej informacji na temat koncepcji tabel danych czasowych można znaleźć w artykule Pierwsze kroki z tabelami danych czasowych w wersji systemowej.

Usuwanie tabel tymczasowych różni się od procesu usuwania zwykłej tabeli. Musimy wykonać następujące kroki:

  1. Wyłącz SYSTEM_VERSIONING.
  2. Upuść tabelę czasową.
  3. Upuść tabelę historii.

Przyjrzyjmy się procesowi – usuń [Kraj].[Miasto] tabela.

Krok 1:Uruchom następujący skrypt, aby wyłączyć WERSJĘ SYSTEMU:

Alter table [Country].[tblCity] set ( SYSTEM_VERSIONING = OFF  )

Krok 2:Usuń [Kraj].[Miasto] tabeli, uruchamiając następującą instrukcję DROP TABLE:

drop table [Country].[tblCity]

Krok 3:Usuń [Kraj].[Archiwum_miasta] tabeli, uruchamiając następujące zapytanie:

drop table [Country].[City_Archive]

Krok 4:Sprawdź, czy tabela została usunięta, wykonując następujące zapytanie:

Use WideWorldImporters
Go
select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME in ('tblCity')

Wyjście:

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

Podsumowanie

Instrukcja DROP TABLE jest niezbędna, gdy musimy na stałe usunąć pewne tabele z bazy danych. Jednak użycie tego stwierdzenia ma swoje osobliwości. Zbadaliśmy kilka standardowych przypadków użycia i możliwych problemów występujących podczas wykonywania zadań.

Dowiedzieliśmy się również, jak zastosować instrukcję DROP TABLE, aby usunąć pojedynczą tabelę, tabelę z kluczem obcym i tabelę czasową z wersjonowaną przez system. Mam nadzieję, że ten artykuł będzie pomocny.

Przeczytaj również

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połącz SQL Server z HubSpot CRM

  2. Czy ograniczenie Check może odnosić się do innej tabeli?

  3. Eksportuj tabelę do pliku z nagłówkami kolumn (nazwami kolumn) za pomocą narzędzia bcp i SQL Server 2008

  4. Przeprowadź analizę produktu za pomocą wyszukiwania pełnotekstowego programu SQL Server. Część 1

  5. Ograniczenia SQL Server Express