Оператор DELETE стр. 2 |
|||||||||||||||||||||||||||||
Оператор TRUNCATE TABLEКак отмечалось выше, при выполнении этой команды значение счетчика (IDENTITY) сбрасывается в начальное значение. Давайте проверим это утверждение в MS SQL Server. Для начала создадим таблицу с автоинкрементируемым столбцом, и добавим в нее три строки.
Начальным значением счетчика является 5, приращение счетчика выполняется также с шагом 5. Теперь удалим строки с помощью оператора DELETE, после чего снова вставим те же строки в таблицу.
Как видно из результата, состояние счетчика не было сброшено, и приращение продолжилось с последнего значения (15), в отличие от использования оператора TRUNCATE TABLE:
В то же время Стандарт предполагает несколько иное поведение. Стандартный синтаксис имеет вид
Оператор TRUNCATE TABLE неприменим, если на таблицу имеется ссылка по внешнему ключу. Это стандартное поведение имеет место в SQL Server. Если создать, например, такую ссылающуюся таблицу, которая даже не будет содержать данных
Cannot truncate table 'Truncate_test' because it is being referenced by a FOREIGN KEY constraint. Теперь проверим, насколько близки к стандарту другие реализации. |