Když se zabýváme mazáním dat z tabulek, které mají vztahy s cizím klíčem – což je v podstatě případ každé správně navržené databáze – můžeme zakázat všechna omezení, smazat všechna data a poté omezení znovu povolit
-- 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"
Více o deaktivaci omezení a spouštěčů zde
pokud některé tabulky obsahují sloupce identity, můžeme je chtít znovu nasadit
EXEC sp_MSForEachTable "DBCC CHECKIDENT ( '?', RESEED, 0)"
Všimněte si, že chování RESEED se liší mezi úplně novou tabulkou a tabulkou, do které byla dříve vložena nějaká data z BOL:
DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)
Aktuální hodnota identity je nastavena na newReseedValue. Pokud nebyly do tabulky od jejího vytvoření vloženy žádné řádky, první řádek vložený po provedení DBCC CHECKIDENT použije jako identitu newReseedValue. Jinak další vložený řádek použije newReseedValue + 1. Pokud je hodnota newReseedValue menší než maximální hodnota ve sloupci identity, při následných odkazech na tabulku bude vygenerována chybová zpráva 2627.
Děkuji Robertovi za upozornění na skutečnost, že deaktivace omezení neumožňuje použít zkrácení, omezení by musela být zrušena a poté znovu vytvořena