適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric のウェアハウス
1 つ以上のテーブルの定義、およびそれらのテーブルのすべてのデータ、インデックス、トリガー、制約、権限の仕様を削除します。 削除されたテーブルを参照しているすべてのビューとストアド プロシージャは、DROP VIEW および DROP PROCEDURE を使用して明示的に削除する必要があります。 テーブルへの依存関係を報告するには sys.dm_sql_referencing_entities を使用します。
構文
-- 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 }
[;]
引数
database_name
テーブルが作成されたデータベースの名前を指定します。
Azure SQL Databaseは、database_nameが現在のデータベースである場合、またはdatabase_nameがtempdbである場合、#または##で始まるdatabase_name.schema_name.object_nameobject_name、3部構成の名前形式をサポートしています。 Azure SQL Databaseは4つの部分名をサポートしていません。
存在する場合
適用対象: SQL Server (SQL Server 2016 (13.x) から現在のバージョンまで)。
条件付きでは既に存在する場合にのみ、テーブルを削除します。
schema_name
テーブルが所属するスキーマの名前を指定します。
table_name
削除するテーブル名を指定します。
注釈
DROP TABLE
FOREIGN KEY制約で参照されるテーブルをドロップするためには使えません。 参照 FOREIGN KEY 制約または参照テーブルを最初に削除しなければなりません。
同じ文の中で複数のテーブルをドロップすることができます DROP TABLE 文。
FOREIGN KEY制約内の参照テーブルと参照されたプライマリキーまたは一意キーを持つテーブルの両方が同じDROP TABLE文でドロップされている場合、参照テーブルを最初にリストしなければなりません。
テーブルを削除すると、そのテーブルのルールや既定値はバインドを失い、そのテーブルに関係付けられている制約やトリガーも自動的に削除されます。 テーブルを再作成する場合は、適切なルールや既定値を再バインドし、トリガーを再作成し、必要なすべての制約を追加する必要があります。
DELETE文やTRUNCATE TABLE文でテーブル内のすべての行を削除した場合、DROP TABLEで削除されるまでテーブルの定義は存在します。
FILESTREAM属性のvarbinary(max)列を含むテーブルをドロップしても、ファイルシステムに保存されたデータは削除されません。
台帳テーブルが削除されると、その依存オブジェクト (履歴テーブルと台帳ビュー) も削除されます。 履歴テーブルや台帳ビューは直接削除できません。 システムは台帳テーブルおよびそれに依存するオブジェクトをドロップする際に ソフト削除 の意味論を強制します。実際にはドロップされるのではなく、システムカタログビューでドロップとしてマークされ名前が変更されます。 詳細については、台帳に関する考慮事項と制限事項に関するページを参照してください。
重要
DROP TABLE また CREATE TABLE 同じバッチの同じテーブルで実行すべきではありません。 実行した場合、予期しないエラーが発生する可能性があります。
Fabric SQLデータベースでは、テーブルをドロップするとデータベースからもFabric OneLakeからも削除されます。 ドロップしたテーブルのすべてのミラーデータは削除されます。
ディファード・ディスロケーション
テーブルがドロップされ、そのテーブルやインデックスが128以上のエクステントを持つ場合、データベースエンジンは実際のページ解除およびそれに関連するロックをトランザクションコミット後まで延期します。 テーブルとインデックスは論理的と物理的な2つの別々のフェーズで廃止されます。 論理フェーズでは、既存の割り当てユニットがデロロケーション対象としてマークされ、トランザクションがコミットするまでロックされます。 物理段階では、バックグラウンドプロセスが解除予定のページを削除します。 つまり、 DROP TABLE で解放されたスペースがすぐに新規割り当てに利用できない場合もあります。
加速データベース復旧が有効の場合、拡張数に関わらず論理フェーズと物理フェーズが別々に使用されます。
アクセス許可
テーブルが属するスキーマに対する ALTER 権限、テーブルに対する CONTROL 権限、または db_ddladmin 固定データベースロールのメンバーシップが必要です。
文が台帳テーブルをドロップする場合は、 ALTER LEDGER 権限が必要です。
例
A. 現在のデータベース内のテーブルを削除する
次の例では、現在のデータベースから、ProductVendor1 テーブルとそのデータおよびインデックスを削除します。
DROP TABLE ProductVendor1;
B. 他のデータベースのテーブルを削除する
次の例では、SalesPerson2 データベースにある AdventureWorks2025 テーブルを削除します。 この例は、サーバー インスタンス上にあるどのデータベースからでも実行できます。
DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;
C. 一時テーブルを削除する
以下の例では一時テーブルを作成し、その存在をテストし、それを破棄し、 SELECT 文を実行しようと試みますが失敗します。 この例はSQL Server 2016(13.x)から利用可能な IF EXISTS 構文を使用していません。
CREATE TABLE #temptable (col1 int);
INSERT INTO #temptable
VALUES (10);
SELECT col1 FROM #temptable;
IF OBJECT_ID(N'tempdb..#temptable', N'U') IS NOT NULL
DROP TABLE #temptable;
SELECT col1 FROM #temptable;
D. IF EXISTS を使用してテーブルを削除する
適用対象: SQL Server (SQL Server 2016 (13.x) から現在のバージョンまで)。
次の例では、T1 という名前のテーブルを作成します。 2 番目のステートメントで、テーブルを削除します。 3つ目の文はテーブルがすでに削除されているため何のアクションも行いませんが、エラーは発生しません。
CREATE TABLE T1 (Col1 int);
DROP TABLE T1;
DROP TABLE IF EXISTS T1;