在本教程中,将学习如何使用SQL Server DROP TABLE
语句从数据库中删除一个或多个表。
有时,我们希望删除一些不再使用的表。 那么可使用以下DROP TABLE
语句:
DROP TABLE [IF EXISTS] [database_name.][schema_name.]table_name;
在上面语法中,
- 首先,
database_name
指定要删除的表的名称。 - 其次,指定创建表的数据库的名称以及表所属的模式的名称。数据库名称是可选的。 如果不指定,
DROP TABLE
语句将删除当前数据库中的表。 - 第三,使用
IF EXISTS
子句仅在表存在时才删除表。 自SQL Server 2016 13.x起,支持IF EXISTS
子句。 如果删除不存在的表,则会出现错误。 如果表已经存在,则IF EXISTS
子句有条件地删除该表。
当SQL Server删除表时,它还会删除该表的所有数据,触发器,约束和权限。 此外,SQL Server不会显式删除引用已删除表的视图和存储过程。 要显式删除这些对象,必须使用DROP VIEW
和DROP PROCEDURE
语句。
SQL Server允许使用单个DROP TABLE
语句来一次删除多个表,如下所示:
DROP TABLE [database_name.][schema_name.]table_name_1,
[database_name.][schema_name.]table_name_2,
...
[database_name.][schema_name.]table_name_n;
SQL Server DROP TABLE示例
下面来看一些使用SQL Server DROP TABLE
语句的示例。
1. 删除不存在的表
以下语句删除sales
模式中的revenue
表:
DROP TABLE IF EXISTS sales.revenues;
在此示例中,revenue
表不存在。 因为它使用IF EXISTS
子句,所以语句成功执行,但是没有表可以删除。
2. 删除单个表示例
以下语句在sales
模式中创建一个名为delivery
的新表:
CREATE TABLE sales.delivery (
delivery_id INT PRIMARY KEY,
delivery_note VARCHAR (255) NOT NULL,
delivery_date DATE NOT NULL
);
要删除delivery
表,请使用以下语句:
DROP TABLE sales.delivery;
3. 删除具有外键约束的表
以下语句在procurement
模式中创建两个新表:supplier_groups
和supplier
:
CREATE SCHEMA procurment;
GO
CREATE TABLE procurment.supplier_groups (
group_id INT IDENTITY PRIMARY KEY,
group_name VARCHAR (50) NOT NULL
);
CREATE TABLE procurment.suppliers (
supplier_id INT IDENTITY PRIMARY KEY,
supplier_name VARCHAR (50) NOT NULL,
group_id INT NOT NULL,
FOREIGN KEY (group_id) REFERENCES procurement.supplier_groups (group_id)
);
下面尝试删除supplier_groups
表:
DROP TABLE procurement.supplier_groups;
SQL Server发出以下错误:
Could not drop object 'procurement.supplier_groups' because it is referenced by a FOREIGN KEY constraint.
SQL Server不允许删除外部约束引用的表。 要删除此表,必须先删除引用外键约束或引用表。 在这种情况下,必须先删除supplier
表或supplier
表中的外键约束,然后再删除supplier_groups
表。
DROP TABLE procurement.supplier_groups;
DROP TABLE procurement.suppliers;
如果使用单个DROP TABLE
语句删除两个表,则必须将引用表放在前面,如下面的查询所示:
DROP TABLE procurement.suppliers, procurement.supplier_groups;
在本教程中,学习了如何使用SQL Server DROP TABLE
语句从数据库中删除一个或多个表。