DROP TABLE (Transact-SQL)DROP TABLE (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

1 つ以上のテーブルの定義、およびそれらのテーブルのすべてのデータ、インデックス、トリガー、制約、権限の仕様を削除します。Removes one or more table definitions and all data, indexes, triggers, constraints, and permission specifications for those tables. 削除されたテーブルを参照しているすべてのビューとストアド プロシージャは、DROP VIEW および DROP PROCEDURE を使用して明示的に削除する必要があります。Any view or stored procedure that references the dropped table must be explicitly dropped by using DROP VIEW or DROP PROCEDURE. テーブルへの依存関係を報告するには sys.dm_sql_referencing_entities を使用します。To report the dependencies on a table, use sys.dm_sql_referencing_entities.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

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

引数Arguments

database_namedatabase_name
テーブルが作成されたデータベースの名前を指定します。Is the name of the database in which the table was created.

Windows Azure SQL データベースでは、database_name が現在のデータベースの場合、または database_name が tempdb で、object_name が # で始まる場合に、3 つの要素で構成された名前形式 database_name.[schema_name].object_name をサポートします。Windows Azure SQL Database supports the three-part name format database_name.[schema_name].object_name when the database_name is the current database or the database_name is tempdb and the object_name starts with #. Windows Azure SQL データベースでは、4 つの要素で構成された名前はサポートされません。Windows Azure SQL Database does not support four-part names.

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

条件付きでは既に存在する場合にのみ、テーブルを削除します。Conditionally drops the table only if it already exists.

schema_nameschema_name
テーブルが所属するスキーマの名前を指定します。Is the name of the schema to which the table belongs.

table_nametable_name
削除するテーブル名を指定します。Is the name of the table to be removed.

RemarksRemarks

DROP TABLE を使用して、FOREIGN KEY 制約によって参照されているテーブルを削除することはできません。DROP TABLE cannot be used to drop a table that is referenced by a FOREIGN KEY constraint. まず、参照している FOREIGN KEY 制約または参照テーブルを削除する必要があります。The referencing FOREIGN KEY constraint or the referencing table must first be dropped. 参照しているテーブルと、主キーを格納しているテーブルの両方を同じ DROP TABLE ステートメントで削除する場合には、参照しているテーブルを先に指定する必要があります。If both the referencing table and the table that holds the primary key are being dropped in the same DROP TABLE statement, the referencing table must be listed first.

任意のデータベースから、複数のテーブルを削除することができます。Multiple tables can be dropped in any database. 削除するテーブルが、同時に削除される別のテーブルの主キーを参照している場合には、外部キーを持つ参照元のテーブルを、参照されている主キーを持つテーブルよりも前に指定する必要があります。If a table being dropped references the primary key of another table that is also being dropped, the referencing table with the foreign key must be listed before the table holding the primary key that is being referenced.

テーブルを削除すると、そのテーブルのルールや既定値はバインドを失い、そのテーブルに関係付けられている制約やトリガーも自動的に削除されます。When a table is dropped, rules or defaults on the table lose their binding, and any constraints or triggers associated with the table are automatically dropped. テーブルを再作成する場合は、適切なルールや既定値を再バインドし、トリガーを再作成し、必要なすべての制約を追加する必要があります。If you re-create a table, you must rebind the appropriate rules and defaults, re-create any triggers, and add all required constraints.

DELETE tablename や、TRUNCATE TABLE ステートメントを使用して、テーブルのすべての行を削除しても、そのテーブルは、テーブル自体を削除しない限り存在します。If you delete all rows in a table by using DELETE tablename or use the TRUNCATE TABLE statement, the table exists until it is dropped.

128 個を超えるエクステントを使用する大きなテーブルやインデックスは、論理フェーズと物理フェーズの 2 段階で削除します。Large tables and indexes that use more than 128 extents are dropped in two separate phases: logical and physical. 論理フェーズでは、そのテーブルが使用している既存のアロケーション ユニットに割り当て解除のマークが付き、トランザクションがコミットするまでロックされます。In the logical phase, the existing allocation units used by the table are marked for deallocation and locked until the transaction commits. 物理フェーズでは、割り当て解除のマークが付いた IAM ページが、バッチで物理的に削除されます。In the physical phase, the IAM pages marked for deallocation are physically dropped in batches.

FILESTREAM 属性が指定されている VARBINARY(MAX) 列を含むテーブルを削除しても、ファイル システムに保存されているデータは削除されません。If you drop a table that contains a VARBINARY(MAX) column with the FILESTREAM attribute, any data stored in the file system will not be removed.

重要

DROP TABLE と CREATE TABLE を同じバッチ内の同じテーブルに対して実行しないでください。DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch. 実行した場合、予期しないエラーが発生する可能性があります。Otherwise an unexpected error may occur.

アクセス許可Permissions

テーブルが属するスキーマに対する ALTER 権限、テーブルに対する CONTROL 権限、または db_ddladmin 固定データベース ロールのメンバーシップが必要です。Requires ALTER permission on the schema to which the table belongs, CONTROL permission on the table, or membership in the db_ddladmin fixed database role.

使用例Examples

A.A. 現在のデータベース内のテーブルを削除するDropping a table in the current database

次の例では、現在のデータベースから、ProductVendor1 テーブルとそのデータおよびインデックスを削除します。The following example removes the ProductVendor1 table and its data and indexes from the current database.

DROP TABLE ProductVendor1 ;  

B.B. 他のデータベースのテーブルを削除するDropping a table in another database

次の例では、AdventureWorks2012AdventureWorks2012 データベースにある SalesPerson2 テーブルを削除します。The following example drops the SalesPerson2 table in the AdventureWorks2012AdventureWorks2012 database. この例は、サーバー インスタンス上にあるどのデータベースからでも実行できます。The example can be executed from any database on the server instance.

DROP TABLE AdventureWorks2012.dbo.SalesPerson2 ;  

C.C. 一時テーブルを削除するDropping a temporary table

次の例では、一時テーブルを作成して、その存在テストを行います。さらに、このテーブルを削除して、再度存在テストを行います。The following example creates a temporary table, tests for its existence, drops it, and tests again for its existence. この例では、SQL Server 2016 (13.x)SQL Server 2016 (13.x) 以降で使用できる IF EXISTS 構文は使用しません。This example does not use the IF EXISTS syntax which is available beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x).

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.D. IF EXISTS を使用してテーブルを削除するDropping a table using IF EXISTS

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

次の例では、T1 のという名前のテーブルを作成します。The following example creates a table named T1. 2 番目のステートメントで、テーブルを削除します。Then the second statement drops the table. 3 番目のステートメントでは、テーブルがすでに削除されているため、何も操作が実行されませんが、エラーは発生しません。The third statement performs no action because the table is already deleted, however it does not cause an error.

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

参照See Also

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