DROP TABLE (Transact-SQL)
适用于:Microsoft Fabric 中的 SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics Analytics
Platform System (PDW) Warehouse
删除一个或多个表定义以及这些表的所有数据、索引、触发器、约束和权限规范。 任何引用已删除表的视图或存储过程都必须使用 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 }
[;]
注意
若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档。
参数
database_name
要在其中创建表的数据库的名称。
Azure SQL 数据库支持由三部分组成的名称格式 database_name.[schema_name].object_name,其中 database_name 为当前数据库,database_name 为 tempdb,object_name 以 # 开头。 Azure SQL 数据库不支持由四部分组成的名称。
IF EXISTS
适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)。
有条件地删除表(仅当其已存在时)。
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 固定数据库角色中的成员身份。
如果该语句删除了一个分类帐表,则需要 ALTER LEDGER
权限。
示例
A. 删除当前数据库中的表
以下示例将从当前数据库中删除 ProductVendor1
表及其数据和索引。
DROP TABLE ProductVendor1 ;
B. 删除其他数据库中的表
以下示例将删除 AdventureWorks2022
数据库中的 SalesPerson2
表。 可以在服务器实例上的任何数据库中执行此示例。
DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;
C. 删除临时表
以下示例将创建一个临时表,测试该表是否存在,删除该表,然后再次测试该表是否存在。 此示例不使用 IF EXISTS 语法,该语法适用于 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 EXISTS 删除表
适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)。
以下示例创建名为 T1 的表。 然后,第二条语句删除表。 第三条语句不执行任何操作,因为此表已删除,但这不会引起错误。
CREATE TABLE T1 (Col1 INT);
GO
DROP TABLE IF EXISTS T1;
GO
DROP TABLE IF EXISTS T1;
另请参阅
ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DELETE (Transact-SQL)
sp_help (Transact-SQL)
sp_spaceused (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
DROP VIEW (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)