При удалении данных из таблиц, которые имеют отношения внешнего ключа - что в основном имеет место с любой правильно спроектированной базой данных - мы можем отключить все ограничения, удалить все данные и затем снова включить ограничения
-- disable all constraints
EXEC sp_MSForEachTable "ALTER TABLE ? NOCHECK CONSTRAINT all"
-- delete data in all tables
EXEC sp_MSForEachTable "DELETE FROM ?"
-- enable all constraints
exec sp_MSForEachTable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Подробнее об отключении ограничений и триггеров здесь
если в некоторых таблицах есть столбцы идентификаторов, мы можем захотеть их заполнить заново
EXEC sp_MSForEachTable "DBCC CHECKIDENT ( '?', RESEED, 0)"
Обратите внимание, что поведение RESEED отличается для новой таблицы и таблицы, в которую ранее были вставлены некоторые данные из BOL :
ПРОВЕРКА DBCC ('имя_таблицы', RESEED, newReseedValue)
Текущее значение идентификатора установлено на
newReseedValue. Если нет строк
был вставлен в таблицу, так как
был создан, первая строка вставлена
после выполнения DBCC CHECKIDENT будет
используйте newReseedValue в качестве идентификатора.
В противном случае следующая вставленная строка будет
используйте newReseedValue + 1. Если значение
newReseedValue меньше, чем
максимальное значение в столбце идентичности,
сообщение об ошибке 2627 будет сгенерировано
по последующим ссылкам на таблицу.
Спасибо Роберту за то, что он указал на тот факт, что отключение ограничений не позволяет использовать усечение, ограничения должны быть удалены, а затем воссозданы