sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan trunkerer du alle tabeller i en database ved hjælp af TSQL?

Når vi beskæftiger os med sletning af data fra tabeller, der har udenlandske nøglerelationer - hvilket dybest set er tilfældet med enhver korrekt designet database - kan vi deaktivere alle begrænsningerne, slette alle data og derefter genaktivere begrænsninger

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

Mere om deaktivering af begrænsninger og udløsere her

hvis nogle af tabellerne har identitetskolonner, vil vi måske gense dem

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

Bemærk, at RESEED's opførsel adskiller sig mellem splinterny tabel og en, som tidligere havde indsat nogle data fra BOL:

DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)

Den aktuelle identitetsværdi er indstillet til newReseedValue. Hvis ingen rækker er blevet indsat i tabellen, siden den blev oprettet, vil den første række, der er indsat efter udførelse af DBCC CHECKIDENT, bruge newReseedValue som identitet. Ellers vil den næste indsatte række bruge newReseedValue + 1. Hvis værdien af ​​newReseedValue er mindre end den maksimale værdi i kolonnen identitet fejlmeddelelse 2627 vil blive genereret ved efterfølgende referencer til tabellen.

Tak til Robert for at påpege det faktum, at deaktivering af begrænsninger ikke tillader brug af trunkering, ville begrænsningerne skulle droppes og derefter genskabes



  1. Sådan importeres CSV-fil i PostgreSQL

  2. Import af en CSV til MySQL med andet datoformat

  3. Postgres/JSON - opdater alle array-elementer

  4. For en nybegynder er der stor forskel mellem MySQL og PostgreSQL