sql >> Database >  >> RDS >> Sqlserver

Hoe kap je alle tabellen in een database af met TSQL?

Bij het verwijderen van gegevens uit tabellen die relaties met refererende sleutels hebben - wat in principe het geval is bij elke goed ontworpen database - kunnen we alle beperkingen uitschakelen, alle gegevens verwijderen en vervolgens beperkingen opnieuw inschakelen

-- 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"

Meer over het uitschakelen van beperkingen en triggers hier

als sommige tabellen identiteitskolommen hebben, willen we ze misschien opnieuw bekijken

EXEC sp_MSForEachTable "DBCC CHECKIDENT ( '?', RESEED, 0)"

Merk op dat het gedrag van RESEED verschilt tussen een gloednieuwe tabel en een tabel waarin eerder gegevens waren ingevoegd vanuit BOL:

DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)

De huidige identiteitswaarde is ingesteld op de nieuweReseedValue. Als er geen rijen zijn ingevoegd in de tabel sinds deze is gemaakt, zal de eerste rij die is ingevoegd na het uitvoeren van DBCC CHECKIDENT newReseedValue als identiteit gebruiken. Anders zal de volgende ingevoegde rij newReseedValue + 1 gebruiken. foutmelding 2627 wordt gegenereerd bij volgende verwijzingen naar de tabel.

Met dank aan Robert voor het feit dat het uitschakelen van beperkingen het gebruik van truncate niet toestaat, de beperkingen zouden moeten worden verwijderd en vervolgens opnieuw worden gemaakt



  1. Een opgeslagen procedure aanroepen binnen een opgeslagen procedure

  2. Spaties uit een string verwijderen in MySQL

  3. Verbeter de prestaties van SQL Server-query's op grote tabellen

  4. Wanneer geërfde tabellen gebruiken in PostgreSQL?