SQL Server删除表

在本教程中,将学习如何使用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 VIEWDROP 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_groupssupplier

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语句从数据库中删除一个或多个表。


上一篇: SQL Server数据定义 下一篇: SQL Server修改数据