SQL Server TRUNCATE TABLE

В этом руководстве вы узнаете, как использовать оператор SQL Server TRUNCATE TABLE для более быстрого и эффективного удаления всех строк из таблицы.

Введение в оператор TRUNCATE TABLE SQL Server

Иногда вам нужно удалить все строки из таблицы. В этом случае вы обычно используете оператор DELETE без предложения WHERE.

В следующем примере создается новая таблица с именем customer_groups и вставляется несколько строк в таблицу :

CREATE TABLE sales.customer_groups(
    group_id INT PRIMARY KEY IDENTITY,
    group_name VARCHAR(50) NOT NULL
);
INSERT INTO sales.customer_groups(group_name)
VALUES
   ('Intercompany'),
   ('Third Party'),
   ('One time');

Чтобы удалить все строки из таблицы customer_groups, используйте оператор DELETE следующим образом:

DELETE FROM sales.customer_groups;

Помимо оператора DELETE FROM, для удаления всех строк из таблицы можно использовать оператор TRUNCATE TABLE.

Ниже показан синтаксис оператора TRUNCATE TABLE:

TRUNCATE TABLE [database_name.][schema_name.]table_name;

В этом синтаксисе сначала указывается имя таблицы, из которой вы хотите удалить все строки. Во-вторых, имя базы данных — это имя базы данных, в которой была создана таблица. Имя базы данных необязательно. Если вы его пропустите, оператор удалит таблицу в текущей подключенной базе данных.

Следующие операторы сначала вставляют несколько строк в таблицу customer_groups, а затем удаляют из нее все строки с помощью оператора TRUNCATE TABLE:

INSERT INTO sales.customer_groups(group_name)
VALUES
   ('Intercompany'),
   ('Third Party'),
   ('One time');   
TRUNCATE TABLE sales.customer_groups;

TRUNCATE TABLE похож на оператор DELETE без предложения WHERE. Однако оператор TRUNCATE выполняется быстрее и использует меньше системных и транзакционных ресурсов журнала.

TRUNCATE TABLE против DELETE

Оператор TRUNCATE TABLE имеет следующие преимущества по сравнению с оператором DELETE:

1) Используйте меньше журнала транзакций

Оператор DELETE удаляет строки по одной за раз и вставляет запись в журнал транзакций для каждой удаленной строки. С другой стороны, оператор TRUNCATE TABLE удаляет данные, освобождая страницы данных, используемые для хранения данных таблицы, и вставляет только освобождения страниц в журналы транзакций.

2) Используйте меньше замков

Когда оператор DELETE выполняется с использованием блокировки строки, каждая строка в таблице блокируется для удаления. TRUNCATE TABLE блокирует таблицу и страницы, а не каждую строку.

3) Сброс личности

Если в таблице, подлежащей усечению, имеется столбец идентификаторов, счетчик для этого столбца сбрасывается до начального значения при удалении данных оператором TRUNCATE TABLE, но не оператором DELETE.

В этом уроке вы узнали, как использовать оператор TRUNCATE TABLE для более быстрого и эффективного удаления всех строк из таблицы.

Мирослав С.

Автор статей, ИБ-специалист