DROP TABLE (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric のウェアハウス

1 つ以上のテーブルの定義、およびそれらのテーブルのすべてのデータ、インデックス、トリガー、制約、権限の仕様を削除します。 削除されたテーブルを参照しているすべてのビューとストアド プロシージャは、DROP VIEW および DROP PROCEDURE を使用して明示的に削除する必要があります。 テーブルへの依存関係を報告するには sys.dm_sql_referencing_entities を使用します。

Transact-SQL 構文表記規則

構文

-- Syntax for SQL Server, Azure SQL Database, Warehouse in Microsoft Fabric
  
DROP TABLE [ IF EXISTS ] { database_name.schema_name.table_name | schema_name.table_name | table_name } [ ,...n ]  
[ ; ]  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse
  
DROP TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
[;]  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

database_name
テーブルが作成されたデータベースの名前を指定します。

Azure SQL Database では、database_name が現在のデータベースの場合、または database_name が tempdb で、object_name が # で始まる場合に、3 つの要素で構成された名前形式 database_name.[schema_name].object_name がサポートされます。 Azure SQL Database では、4 つの要素で構成された名前はサポートされません。

IF EXISTS
適用対象: SQL Server (SQL Server 2016 (13.x) から現在のバージョンまで)。

条件付きでは既に存在する場合にのみ、テーブルを削除します。

schema_name
テーブルが所属するスキーマの名前を指定します。

table_name
削除するテーブル名を指定します。

注釈

DROP TABLE を使用して、FOREIGN KEY 制約によって参照されているテーブルを削除することはできません。 まず、参照している FOREIGN KEY 制約または参照テーブルを削除する必要があります。 参照しているテーブルと、主キーを格納しているテーブルの両方を同じ DROP TABLE ステートメントで削除する場合には、参照しているテーブルを先に指定する必要があります。

任意のデータベースから、複数のテーブルを削除することができます。 削除するテーブルが、同時に削除される別のテーブルの主キーを参照している場合には、外部キーを持つ参照元のテーブルを、参照されている主キーを持つテーブルよりも前に指定する必要があります。

テーブルを削除すると、そのテーブルのルールや既定値はバインドを失い、そのテーブルに関係付けられている制約やトリガーも自動的に削除されます。 テーブルを再作成する場合は、適切なルールや既定値を再バインドし、トリガーを再作成し、必要なすべての制約を追加する必要があります。

DELETE tablename や、TRUNCATE TABLE ステートメントを使用して、テーブルのすべての行を削除しても、そのテーブルは、テーブル自体を削除しない限り存在します。

128 個を超えるエクステントを使用する大きなテーブルやインデックスは、論理フェーズと物理フェーズの 2 段階で削除します。 論理フェーズでは、そのテーブルが使用している既存のアロケーション ユニットに割り当て解除のマークが付き、トランザクションがコミットするまでロックされます。 物理フェーズでは、割り当て解除のマークが付いた IAM ページが、バッチで物理的に削除されます。

FILESTREAM 属性が指定されている VARBINARY(MAX) 列を含むテーブルを削除しても、ファイル システムに保存されているデータは削除されません。

台帳テーブルが削除されると、その依存オブジェクト (履歴テーブルと台帳ビュー) も削除されます。 履歴テーブルと台帳ビューを直接削除することはできません。 台帳テーブルとその依存オブジェクトを削除するとき、システムによって "論理的な削除" セマンティクスが適用されます。実際には削除されませんが、代わりにシステム カタログ ビューで削除済みとしてマークされ、名前が変更されます。 詳細については、台帳に関する考慮事項と制限事項に関するページを参照してください。

重要

DROP TABLE と CREATE TABLE を同じバッチ内の同じテーブルに対して実行しないでください。 実行した場合、予期しないエラーが発生する可能性があります。

アクセス許可

テーブルが属するスキーマに対する ALTER 権限、テーブルに対する CONTROL 権限、または db_ddladmin 固定データベース ロールのメンバーシップが必要です。

ステートメントによって台帳テーブルを削除する場合は、ALTER LEDGER 権限が必要です。

A. 現在のデータベース内のテーブルを削除する

次の例では、現在のデータベースから、ProductVendor1 テーブルとそのデータおよびインデックスを削除します。

DROP TABLE ProductVendor1 ;  

B. 他のデータベースのテーブルを削除する

次の例では、AdventureWorks2022 データベースにある SalesPerson2 テーブルを削除します。 この例は、サーバー インスタンス上にあるどのデータベースからでも実行できます。

DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;  

C. 一時テーブルを削除する

次の例では、一時テーブルを作成して、その存在テストを行います。さらに、このテーブルを削除して、再度存在テストを行います。 この例では、SQL Server 2016 (13.x) 以降で使用できる IF EXISTS 構文は使用しません。

CREATE TABLE #temptable (col1 INT);  
GO  
INSERT INTO #temptable  
VALUES (10);  
GO  
SELECT * FROM #temptable;  
GO  
IF OBJECT_ID(N'tempdb..#temptable', N'U') IS NOT NULL   
DROP TABLE #temptable;  
GO  
--Test the drop.  
SELECT * FROM #temptable;  

D. IF EXISTS を使用してテーブルを削除する

適用対象: SQL Server (SQL Server 2016 (13.x) から現在のバージョンまで)。

次の例では、T1 のという名前のテーブルを作成します。 2 番目のステートメントで、テーブルを削除します。 3 番目のステートメントでは、テーブルがすでに削除されているため、何も操作が実行されませんが、エラーは発生しません。

CREATE TABLE T1 (Col1 INT);  
GO  
DROP TABLE IF EXISTS T1;  
GO  
DROP TABLE IF EXISTS T1;  

参照

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DELETE (Transact-SQL)
sp_help (Transact-SQL)
sp_spaceused (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
DROP VIEW (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)