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

Область применения: ДаSQL Server ДаБаза данных SQL Azure ДаAzure Synapse Analytics (Хранилище данных SQL) ДаParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database YesAzure Synapse Analytics (SQL DW) YesParallel Data Warehouse

Удаляет одно или больше определений таблиц и все данные, индексы, триггеры, ограничения и разрешения для этих таблиц.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-SQLTopic 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.

База данных SQL Azure поддерживает формат трехкомпонентного имени имя_базы_данных.[имя_схемы].имя_объекта, если имя_базы_данных — это текущая база данных или tempdb, а имя_объекта начинается с символа #.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 #. База данных SQL Azure не поддерживает четырехкомпонентные имена.Azure SQL Database does not support four-part names.

IF EXISTSIF EXISTS
Применимо к: SQL ServerSQL ServerSQL 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 экстентов, удаляются в два этапа: логически и физически.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.

При удалении таблицы, которая содержит столбец VARBINARY(MAX) с атрибутом FILESTREAM, не будут удалены никакие данные, которые хранятся в файловой системе.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. Удаление таблицы из другой базы данныхDropping a table in another database

Следующий пример удаляет таблицу SalesPerson2 из базы данных AdventureWorks2012AdventureWorks2012.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. Удаление временной таблицыDropping a temporary table

Следующий пример создает временную таблицу, проверяет ее наличие, удаляет ее и снова проверяет ее наличие.The following example creates a temporary table, tests for its existence, drops it, and tests again for its existence. В этом примере не используется синтаксис IF EXISTS, доступный с версии SQL Server 2016 (13.x);SQL Server 2016 (13.x).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. Удаление таблицы с помощью IF EXISTSDropping a table using IF EXISTS

Применимо к: SQL ServerSQL ServerSQL 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. Затем вторая инструкция удаляет таблицу.Then the second statement drops the table. Третья инструкция не выполняет никаких действий, так как таблица уже удалена, однако это не вызывает ошибку.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)