2009. december 10., csütörtök

Összes tábla összes adatának törlése SQL Serverben

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:

  1. Na de hol itt a truncate? Itt csak delete-t látok kéremszépen :). Az meg ugyebár nem teljesen ugyanaz :)
    VálaszTörlés