Fejleszési-tesztelési időben előfordul, hogy szeretnénk "nyomni egy resetet" az adatbázisunkon: a séma marad, de ki szeretnék dobni minden adatot. TRUNCATE-eljünk mindent!
-- 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"
A középső sor a tényleges truncate, a kezdő-záró ALTER TABLE-ök csak a kényszerek betartatását kapcsolják ki, majd vissza - így a FOREIGN KEY-ek sem akadályozzák meg az adatok törlését.
az eredeti script és további bölcsességek a témában:
How do you truncate all tables in a database using TSQL? @ StackOverflow
az sp_MSforeachtable tárolt eljárás további hasznos felhasználási lehetőségei:
8 Common Uses of the undocumented Stored Procedure sp_MSforeachtable @ SQLServerCurry

2 megjegyzés: