在没有WHERE子句时使用DELETE语句可以从表中删除所有的行,但Transact-SQLde TRUNCATE TABLE 语句执行此任务时会更快并更有效。TRUNCATE TABLE 语句的句法如下:
TRUNCATE TABLE <table name>
如果使用以下DELETE语句:
DELETE FROM employee
DBMS 将一次一行地处理 EMPLOYEE 表,在想、从表中删除行之前,在事务日志中记下行删除并将要删除的行中的列值也写入事务处理日志。
当执行以下 TRUNCATE TABLE 语句时:
TRUNCATE TABLE emloyee
DBMS 同时删除信息页。每页数据页中包括多行。这样一来 TRUNCATE TABLE 将从表中同时删除多个数据行(与 DELETE 语句一次删除一行不同)。列外,TRUNCATE TABLE 语句并不更新事务处理日志。由此,如果使用 TRUNCATE TABLE 语句从表中删除一些行,则将不能 ROLLBACK(取消)行的删除,及时执行作为部分事务处理执行 TRUNCATE TABLE 语句也是如此。
注:如果事务处理日志已经充满,而 DBMS 又由于保存其上的硬盘上没有空间不能扩展事务处理日志,则使用 TRUNCATE TABLE 语句是特别便利的。如果试图使用 DELETE 语句从表中删除行从而腾出磁盘空间,则由于 DBMS 不能将任何信息写入事务处理日志而不能执行。但是,可以使用 TRUNCATE TABLE 语句从表中删除所有行来腾出磁盘空间,因为此语句并不向事务处理日志写入任何信息,而是永久地删除表行。