在 SQL Server 的日常使用中,我们可能会遇到一些情况,需要从表中删除或移除某个列。有时,这是因为表中的某个列在创建时出现了错误,或者是因为它不再被需要,已经过时了。因此,为了从表中删除一个列,我们需要使用 ALTER TABLE … DROP COLUMN 这一 SQL 语句。在本文中,我们将探讨如何从表中删除列,以及在删除列时需要注意的事项。
ALTER TABLE DROP COLUMN 介绍
语法:
ALTER TABLE DROP COLUMN 语句的语法如下所示:
> ALTER TABLE table_name
> DROP COLUMN columnname1, columnname2;
解释:
这个 ALTER TABLE 语句是一个由两部分组成的命令,用于删除列。
首先,我们需要在 ALTER TABLE 关键字后指定表名,然后在 DROP COLUMN 关键字后给出要删除的列名列表。这个列表可以只包含一个列名,也可以包含多个用逗号 (,) 分隔的列名。
下面我们将通过几个示例来详细讲解 ALTER TABLE DROP column 命令的用法。
示例 1
下面是 ‘Students‘ 表的结构,它包含 7 个列。在这个表中,‘Exam_Name‘ 这一列是误加的,我们希望将其从表中移除。在这种情况下,我们可以使用 SQL Server Management Studio 中的 ‘ALTER TABLE … DROP Column‘ 命令。
!Student tableStudents 表
下面是从 ‘Students‘ 表中删除 ‘Exam_Name‘ 列的命令:
**ALTER TABLE** Students
**DROP COLUMN ** Exam_Name
如果上述命令执行成功,我们将收到以下输出消息:
> Commands completed successfully.
下面是执行上述 DROP column 命令后的结果。你可以看到,‘Exam_Name‘ 现在已经被移除了,表只剩下 6 个列。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20231205191517/Students-TableAfterDROP.png">Students Table after ‘DROP‘ command执行 ‘DROP‘ 命令后的 Students 表
示例 2
下面是用于示例 2 的 ‘Students_Details‘ 表的结构,我们将使用它来演示如何使用 ‘ALTER TABLE DROP Column‘ 命令删除多个列。该表最初有 6 个列。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20231205195555/StudentDetailsTable.png">Table StudentsDetailsStudentsDetails 表
在示例 2 中,使用上面的 ‘StudentsDetails‘ 表,我们需要移除 ‘CourseDetails‘ 和 ‘Parent_Details‘ 这两个列,因为针对这两个列,我们决定将它们拆分到单独的表中,从而从当前表中移除。
因此,下面的命令将使用单条 ‘ALTER TABLE DROP Column‘ 指令来删除这两个列。该命令将一次性删除多个列,如下所示:
ALTER TABLE Students_Details
DROP COLUMN Course_Details, Parent_Details
如果上述命令执行成功,我们将收到以下输出消息:
> Commands completed successfully.
成功执行上述命令后,‘StudentsDetails‘ 表中的 ‘CourseDetails‘ 和 ‘Parent_Details‘ 这两个列就被删除了,表将变成下面这样,现在只剩下 4 个列。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20231205195622/Students-TableAfterDROPMultiple.png">StudentsDetails after 2 column dropped删除 2 个列后的 Students_Details
通过上面的示例,我们已经了解了在需要删除一个或多个列的场景下,如何操作表的列。
列约束与删除列
如果我们尝试删除一个具有列约束的列,那么该列将无法被删除,并且在执行 ALTER TABLE … DROP COLUMN 命令时会显示错误。
示例:
**ALTER TABLE** Students
**DROP COLUMN** Student_Age;
错误信息
> Msg 5074, Level 16, State 1, Line 1
> The object ‘CKStudentAge‘ is dependent on column ‘StudentAge‘.
> Msg 4922, Level 16, State 9, Line 1
> ALTER TABLE DROP COLUMN Student_Age failed because one or more objects access this column.
在上面的删除列查询中,我们指定了列名 ‘Student_Age‘,该列具有一个列约束。由于这个约束的存在,SQL 语句的执行将失败并返回错误消息。
因此,如果我们需要删除一个带有列约束的列,必须先删除该列约束,然后才能从表中删除该列。
下面的语句将删除列约束:
ALTER TABLE Students
DROP CONSTRAINT CK_StudentAge
现在,下面的 DROP column 语句就可以正常工作了:
ALTER TABLE Students
DROP COLUMN Student_Age
注意:
SQL 语句 ‘ALTER TABLE DROP Column‘ 将永久删除列,且无法直接恢复。恢复数据的唯一选择是重新创建该列。
任何带有…