Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memahami Pernyataan DROP TABLE di SQL Server

Pernyataan SQL Server DROP TABLE berfungsi untuk menjatuhkan tabel dari database. Artikel ini akan menjelaskan beberapa skenario penggunaan dan mengilustrasikan cara kerja pernyataan DROP TABLE dengan contoh.

Untuk demonstrasi, kami menggunakan wideworldimportors basis data demo – Anda dapat mengunduhnya dari sini.

Sintaks dari pernyataan DROP TABLE adalah sebagai berikut:

Drop table [Database_name].[Schema_name].[table_name]
  • Nama_basis data : nama database dari mana Anda ingin menghapus tabel di SQL.
  • Nama_Skema : nama skema yang tabelnya ada. Jika Anda telah membuat tabel dalam skema DBO, kita dapat melewati parameter ini. Jika tabel dibuat dalam skema non-default, kita harus menentukan nama nama skema.
  • Nama_Tabel : nama tabel dalam SQL atau MySQL yang ingin Anda hapus.

Saat kita menjatuhkan tabel, SQL Server melakukan tindakan berikut:

  1. Buang tabel dengan data.
  2. Menurunkan statistik tabel.
  3. Menjatuhkan indeks, batasan, dan kunci utama yang terkait dengan tabel itu. Jika kita memiliki hubungan kunci asing, kita harus menghapus tabel anak.

Sebelum menjatuhkan meja, kita harus memperhatikan hal-hal berikut.

  1. Pastikan bahwa prosedur, pemicu, dan tampilan tersimpan yang bergantung pada tabel itu diubah atau dimodifikasi. Anda dapat menemukan objek database yang diperlukan menggunakan sp_depends prosedur tersimpan.
  2. Selalu gunakan [nama_database].[nama_skema].[nama_tabel] format untuk membuang tabel yang benar.
  3. Ingat bahwa tidak mungkin untuk memulihkan tabel tertentu dari cadangan SQL Server. Jika Anda ingin memulihkan tabel tertentu, Anda harus membeli alat pihak ketiga. Jika menurut Anda tabel mungkin memerlukan referensi atau pelaporan kustom, pastikan Anda membuat cadangan tabel dengan membuat salinan lain.

Penyiapan Demo

Dalam demo Wideworldimportors database, ada tabel bernama tblBusinessEntity , tblCountryRegion, tblCity, dan tblPelanggan .

  • Tabel tblBusinessEntity dan tblPelanggan berada dalam skema default, sedangkan tblCountryRegion dan tblCity berada di Negara skema.
  • tblCity adalah tabel temporal versi sistem.
  • Batasan kunci asing berada di antara tblBusinessEntity dan tblPelanggan tabel. BusinessEntityID kolom tblPelanggan referensi ke BusinessEntityID kolom (Kunci Utama) dari tblBusinessEntity meja.

Saya telah memasukkan data dari AdventureWorks2017 database dengan bantuan pernyataan INSERT INTO SELECT * FROM.

Skrip T-SQL untuk menyiapkan demo setup adalah sebagai berikut:

Use WideworldImportors
go
CREATE SCHEMA [country]
Go

Buat tabel:

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

Buat indeks kunci asing:

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

Masukkan data ke dalam 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

Setelah skrip dieksekusi, kami dapat memverifikasi apakah objek telah dibuat dengan benar dan apakah data telah dimasukkan ke dalam tabel.

Periksa tabel:

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

Keluaran:

Dapatkan jumlah baris dalam tabel:

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

Keluaran:

Sekarang, mari kita jelajahi penggunaan DROP TABLE dengan contoh.

Contoh 1:Aplikasi sederhana dari pernyataan DROP TABLE

Terkadang saat bekerja dengan tabel, kesalahan mungkin terjadi. Itu terjadi ketika pengguna mencoba untuk MENGHAPUS Tabel yang tidak ada. Ada cara sederhana untuk menghindari hal ini – menggunakan perintah SQL DROP TABLE IF EXISTS.

Sintaksnya adalah sebagai berikut:

-- use database
USE [MyDatabase];
GO

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

Tidak perlu memeriksa secara manual jika tabel yang ingin Anda jatuhkan sudah ada karena perintah DROP TABLE IF EXITS dalam SQL akan melakukannya untuk Anda.

Anda dapat menggunakan SQL Server Management Studio (SSMS) jika Anda perlu MENGHAPUS semua tabel.

Misalkan kita ingin menghapus tblCountryRegion tabel dari database kami. Untuk itu, jalankan kueri berikut:

use WideWorldImporters
Go
drop table tblCountryRegion

Kami menerima kesalahan:

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

Seperti disebutkan sebelumnya, untuk menghapus tabel yang dibuat dalam skema non-default, kita harus menulis pernyataan DROP TABLE di [nama_skema].[nama_tabel] format .

Jalankan kueri berikut:

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

Keluaran:

Commands completed successfully.

Kami telah berhasil menjatuhkannya.

Contoh 2:Jatuhkan tabel yang memiliki kunci asing

Mari kita lepaskan tblBusinessEntity dari database – jalankan kueri berikut:

use WideWorldImporters
Go
Drop table tblBusinessEntity

Ini mengembalikan kesalahan:

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

Saat kita melepaskan tabel dengan kunci asing yang mereferensikan kunci utama dari tabel induk, kita harus melepaskan tabel induk, lalu kita dapat melepaskan tabel turunan.

Dalam kasus kami, untuk menghapus tblBusinessEntity tabel, kita harus menghapus tblCustomer meja. Jalankan kueri berikut:

use WideWorldImporters
Go
Drop table tblcustomer

Dengan demikian, tabel telah berhasil dijatuhkan.

Setelah menjatuhkan tblcustomer , jalankan pernyataan berikut untuk menghapus tblBusinessEntity tabel:

use WideWorldImporters
Go
Drop table tblBusinessEntity

Keluaran:

Tabel telah berhasil dijatuhkan.

Contoh 3:Letakkan tabel Temporal

Tabel temporal versi sistem pertama kali muncul di SQL Server 2016. Tabel ini dapat mengambil data yang dihapus dan diperbarui, karena tabel riwayat melacak perubahan yang terjadi di tabel temporal. Lihat Memulai dengan Tabel Temporal Berversi Sistem untuk informasi lebih lanjut tentang konsep tabel temporal.

Menjatuhkan tabel temporal berbeda dari proses menjatuhkan tabel biasa. Kita harus melakukan langkah-langkah berikut:

  1. Matikan SYSTEM_VERSIONING.
  2. Lepaskan tabel temporal.
  3. Lepaskan tabel riwayat.

Mari kita periksa prosesnya – lepaskan [Negara].[Kota] tabel.

Langkah 1:Jalankan skrip berikut untuk mematikan SYSTEM_VERSIONING:

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

Langkah 2:Lepaskan [Negara].[Kota] tabel dengan menjalankan pernyataan DROP TABLE berikut:

drop table [Country].[tblCity]

Langkah 3:Lepaskan [Negara].[City_Archive] tabel dengan menjalankan kueri berikut:

drop table [Country].[City_Archive]

Langkah 4:Verifikasi bahwa tabel telah dihapus dengan menjalankan kueri berikut:

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

Keluaran:

Seperti yang Anda lihat, tabel telah dijatuhkan.

Ringkasan

Pernyataan DROP TABLE diperlukan ketika kita perlu menghapus tabel tertentu dari database untuk selamanya. Namun, penggunaan pernyataan ini memiliki kekhasan. Kami telah menjelajahi beberapa kasus penggunaan standar dan kemungkinan masalah yang terjadi selama tugas.

Kami juga belajar bagaimana menerapkan pernyataan DROP TABLE untuk menjatuhkan satu tabel, tabel dengan kunci asing, dan tabel temporal versi sistem. Semoga artikel ini bermanfaat.

Baca juga

Pernyataan SQL DROP TABLE dan Berbagai Kasus Penggunaan


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF5:Tidak dapat melampirkan file '{0}' sebagai database '{1}'

  2. Permintaan PIVOT dinamis SQL Server?

  3. Pergi dengan driver SQL Server tidak dapat terhubung dengan sukses, login gagal

  4. Panggil prosedur tersimpan dengan parameter bernilai tabel dari Java

  5. Memperkenalkan Platform SaaS Pertama di Dunia untuk Memberikan Diagnostik Mendalam untuk Lingkungan SQL Server Hibrida