DROP TABLE (Transact-SQL)

删除一个或多个表定义以及这些表的所有数据、索引、触发器、约束和指定的权限。任何引用已删除表的视图或存储过程都必须使用 DROP VIEWDROP PROCEDURE 显式删除。若要报告表的依赖关系,请使用 sys.dm_sql_referencing_entities

语法

DROP TABLE [ database_name . [ schema_name ] . | schema_name . ]
        table_name [ ,...n ] [ ; ]

参数

  • database_name
    要在其中创建表的数据库的名称。

  • schema_name
    表所属架构的名称。

  • table_name
    要删除的表的名称。

注释

不能使用 DROP TABLE 删除被 FOREIGN KEY 约束引用的表。必须先删除引用 FOREIGN KEY 约束或引用表。如果要在同一个 DROP TABLE 语句中删除引用表以及包含主键的表,则必须先列出引用表。

可以在任何数据库中删除多个表。如果一个要删除的表引用了另一个也要删除的表的主键,则必须先列出包含该外键的引用表,然后再列出包含要引用的主键的表。

删除表时,表的规则或默认值将被解除绑定,与该表关联的任何约束或触发器将被自动删除。如果要重新创建表,则必须重新绑定相应的规则和默认值,重新创建某些触发器,并添加所有必需的约束。

如果使用 DELETE tablename 删除表中的所有行或使用 TRUNCATE TABLE 语句,则在被移除之前,表将一直存在。

删除使用了超过 128 个区的大型表和索引时,需要分两个单独的阶段:逻辑和物理阶段。在逻辑阶段中,对表使用的现有分配单元进行标记以便释放,并对其进行锁定,直到事务提交为止。在物理阶段,标记为要释放的 IAM 页被成批地物理删除。有关详细信息,请参阅 删除并重新生成大型对象

如果删除的表包含带有 FILESTREAM 属性的 VARBINARY (MAX) 列,则不会删除在文件系统中存储的任何数据。

重要说明重要提示

不应在同一个批处理中对同一个表执行 DROP TABLE 和 CREATE TABLE。否则,可能出现意外错误。

权限

要求对此表所属架构拥有 ALTER 权限,对此表拥有 CONTROL 权限,或具有 db_ddladmin 固定数据库角色的成员身份。

示例

A. 删除当前数据库中的表

以下示例将从当前数据库中删除 ProductVendor1 表及其数据和索引。

DROP TABLE ProductVendor1 ;

B. 删除其他数据库中的表

以下示例将删除 AdventureWorks2008R2 数据库中的 SalesPerson2 表。可以在服务器实例上的任何数据库中执行此示例。

DROP TABLE AdventureWorks2008R2.dbo.SalesPerson2 ;

C. 删除临时表

以下示例将创建一个临时表,测试该表是否存在,删除该表,然后再次测试该表是否存在。

USE AdventureWorks2008R2;
GO
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;