DROP TABLE (Transact-SQL)
删除一个或多个表定义以及这些表的所有数据、索引、触发器、约束和权限规范。 任何引用已删除表的视图或存储过程都必须使用 DROP VIEW 或 DROP 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.删除其他数据库中的表
以下示例将删除 AdventureWorks2012 数据库中的 SalesPerson2 表。 可以在服务器实例上的任何数据库中执行此示例。
DROP TABLE AdventureWorks2012.dbo.SalesPerson2 ;
C.删除临时表
以下示例将创建一个临时表,测试该表是否存在,删除该表,然后再次测试该表是否存在。
USE AdventureWorks2012;
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;