Когато се занимаваме с изтриване на данни от таблици, които имат връзки с външни ключове - което по същество е случаят с всяка правилно проектирана база данни - можем да деактивираме всички ограничения, да изтрием всички данни и след това да активираме отново ограничения
-- 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 CHECKIDENT ('table_name', RESEED, newReseedValue)
Текущата стойност на идентичността е зададена на newReseedValue. Ако в таблицата не са били вмъкнати редове от създаването й, първият ред, вмъкнат след изпълнение на DBCC CHECKIDENT, ще използва newReseedValue като идентичност. В противен случай следващият вмъкнат ред ще използва newReseedValue + 1. Ако стойността на newReseedValueum е по-малка от стойността на themaxim identity съобщение за грешка 2627 ще бъде генерирано при последващи препратки към таблицата.
Благодаря на Робърт, че посочи факта, че деактивирането на ограничения не позволява използването на truncate, ограниченията ще трябва да бъдат премахнати и след това пресъздадени