SQL ServerのDROPTABLEステートメントは、データベースからテーブルを削除するのに役立ちます。この記事では、いくつかの使用シナリオを説明し、DROPTABLEステートメントの動作を例で説明します。
デモンストレーションには、 wideworldimportorsを使用しています。 デモデータベース–ここからダウンロードできます。
DROPTABLEステートメントの構文は次のとおりです。
Drop table [Database_name].[Schema_name].[table_name]
- Database_name : SQLでテーブルを削除するデータベースの名前。
- Schema_Name : テーブルが存在するスキーマの名前。 DBOスキーマでテーブルを作成した場合は、このパラメーターをスキップできます。テーブルがデフォルト以外のスキーマで作成されている場合は、スキーマ名の名前を指定する必要があります。
- Table_Name : 削除するSQLまたはMySQLのテーブルの名前。
テーブルを削除すると、SQLServerは次のアクションを実行します。
- データを含むテーブルを削除します。
- テーブルの統計を削除します。
- そのテーブルに関連付けられているインデックス、制約、および主キーを削除します。外部キー関係がある場合は、子テーブルを削除する必要があります。
テーブルを落とす前に、次のことに注意する必要があります。
- そのテーブルに依存するストアドプロシージャ、トリガー、およびビューが変更または変更されていることを確認します。 sp_depends を使用して、必要なデータベースオブジェクトを見つけることができます。 ストアドプロシージャ。
- 常に[database_name]。[schema_name]。[table_name]を使用します 正しいテーブルを削除するためのフォーマット。
- SQLServerバックアップから特定のテーブルを回復することは不可能であることに注意してください。特定のテーブルを回復する場合は、サードパーティのツールを購入する必要があります。テーブルに参照またはカスタムレポートが必要になる可能性があると思われる場合は、別のコピーを作成してテーブルのバックアップを生成してください。
デモのセットアップ
デモではWideworldimportors データベースには、 tblBusinessEntityという名前のテーブルがあります 、 tblCountryRegion、 tblCity、 およびtblCustomer 。
- テーブルtblBusinessEntity およびtblCustomer tblCountryRegion がデフォルトのスキーマにある間、 およびtblCity 国にいる スキーマ。
- tblCity はシステムバージョンの時間テーブルです。
- 外部キー制約はtblBusinessEntityの間にあります およびtblCustomer テーブル。 BusinessEntityID tblCustomerの列 BusinessEntityIDへの参照 tblBusinessEntity の列(主キー) テーブル。
AdventureWorks2017のデータを挿入しました INSERT INTO SELECT*FROMステートメントを使用したデータベース。
デモセットアップを準備するためのT-SQLスクリプトは次のとおりです。
Use WideworldImportors
go
CREATE SCHEMA [country]
Go
テーブルを作成します:
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
外部キーインデックスを作成します:
Use WideworldImportors
go
ALTER TABLE [tblCustomer] WITH CHECK ADD CONSTRAINT [FK_Person_BusinessEntity_BusinessEntityID] FOREIGN KEY([BusinessEntityID])
REFERENCES [tblBusinessEntity] ([BusinessEntityID])
GO
データをテーブルに挿入します:
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
スクリプトが実行されると、オブジェクトが正しく作成されているかどうか、およびデータがテーブルに挿入されているかどうかを確認できます。
表を確認してください:
Use WideWorldImporters
Go
select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME in ('tblCustomer','tblCountryRegion','tblBusinessEntity')
Go
出力:
テーブルの行数を取得します:
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
出力:
それでは、例を挙げてDROPTABLEの使用法を見てみましょう。
例1:DROPTABLEステートメントの簡単な適用
テーブルでの作業中に、間違いが発生する場合があります。これは、ユーザーが存在しないテーブルを削除しようとしたときに発生します。これを回避する簡単な方法があります– SQL DROP TABLEIFEXISTSコマンドを使用します。
構文は次のとおりです。
-- use database USE [MyDatabase]; GO -- attempt to run DROP TABLE only if it exists DROP TABLE IF EXISTS [dbo].[MyTable0]; GO
SQLのDROPTABLEIF EXITSコマンドが自動的に実行するため、削除するテーブルがすでに存在するかどうかを手動で確認する必要はありません。
すべてのテーブルを削除する必要がある場合は、SQL Server Management Studio(SSMS)を使用できます。
tblCountryRegionを削除するとします。 私たちのデータベースからのテーブル。そのためには、次のクエリを実行します。
use WideWorldImporters
Go
drop table tblCountryRegion
エラーが発生しました:
Msg 3701, Level 11, State 5, Line 3
Cannot drop the table 'tblCountryRegion' because it does not exist
or you do not have permission.
前述のように、デフォルト以外のスキーマで作成されたテーブルを削除するには、[schema_name]。[table_name]にDROPTABLEステートメントを記述する必要があります。 フォーマット 。
次のクエリを実行します:
use WideWorldImporters
Go
drop table [country].[tblCountryRegion]
出力:
Commands completed successfully.
テーブルを正常に削除しました。
例2:外部キーを持つテーブルを削除する
tblBusinessEntityを削除しましょう データベースから–次のクエリを実行します:
use WideWorldImporters
Go
Drop table tblBusinessEntity
エラーを返します:
Msg 3726, Level 16, State 1, Line 3
Could not drop object 'tblBusinessEntity' because it is referenced
by a FOREIGN KEY constraint.
親テーブルの主キーを参照する外部キーを使用してテーブルを削除する場合は、親テーブルを削除する必要があります。そうすれば、子テーブルを削除できます。
この場合、 tblBusinessEntityを削除します テーブルの場合、 tblCustomerを削除する必要があります テーブル。次のクエリを実行します:
use WideWorldImporters
Go
Drop table tblcustomer
したがって、テーブルは正常に削除されました。
tblcustomerを削除した後 、次のステートメントを実行して、 tblBusinessEntityを削除します テーブル:
use WideWorldImporters
Go
Drop table tblBusinessEntity
出力:
テーブルは正常に削除されました。
例3:一時テーブルを削除する
システムバージョンの一時テーブルは、SQL Server 2016で最初に登場しました。履歴テーブルは一時テーブルで発生した変更を追跡するため、これらのテーブルは削除および更新されたデータを取得できます。テンポラルテーブルの概念の詳細については、システムバージョンのテンポラルテーブルの概要を参照してください。
一時テーブルの削除は、通常のテーブルの削除プロセスとは異なります。次の手順を実行する必要があります。
- SYSTEM_VERSIONINGをオフにします。
- テンポラルテーブルを削除します。
- 履歴テーブルを削除します。
プロセスを調べてみましょう– [国]。[都市]を削除します テーブル。
手順1:次のスクリプトを実行して、SYSTEM_VERSIONINGをオフにします。
Alter table [Country].[tblCity] set ( SYSTEM_VERSIONING = OFF )
ステップ2:[国]。[都市]を削除します 次のDROPTABLEステートメントを実行してテーブルを作成します。
drop table [Country].[tblCity]
ステップ3:[国]。[City_Archive]を削除します 次のクエリを実行してテーブルを作成します:
drop table [Country].[City_Archive]
手順4:次のクエリを実行して、テーブルが削除されたことを確認します。
Use WideWorldImporters
Go
select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME in ('tblCity')
出力:
ご覧のとおり、テーブルは削除されました。
概要
DROP TABLEステートメントは、データベースから特定のテーブルを完全に削除する必要がある場合に必要です。ただし、このステートメントの使用法にはその特徴があります。いくつかの標準的な使用例と、タスク中に発生する可能性のある問題について説明しました。
また、DROP TABLEステートメントを適用して、単一のテーブル、外部キーを持つテーブル、およびシステムバージョンの一時テーブルを削除する方法も学習しました。この記事がお役に立てば幸いです。
また読む
SQLDROPTABLEステートメントとさまざまなユースケース