27 Feb 2008

Μηδενισμός μίας Βάσης Δεδομένων σε SQL Server.

Αρκετές φορές έχει χρειαστεί να αδειάσω όλους τους πίνακες μίας βάσης δεδομένων. Όσοι έχετε βρεθεί στην  ίδια θέση τότε σίγουρα θα έχετε αντιμετωπίσει το πρόβλημα του ότι πρέπει πρώτα να διαγραφούν τα στοιχεία στους Child πίνακες και μετά στους Parent γιατί αλλιώς τα Relationships δεν θα σας αφήσουν. Η πιο εύκολη λύση είναι να κάνετε Disable όλα τα Constraints και τους Triggers, να κάνετε τις διαγραφές και στη συνέχεια να τα ενεργοποιήσετε ξανά. Όμως αν η βάση έχει καμιά κατοσταριά πίνακες τότε η διαδικασία αυτή είναι επίπονη.

Η λύση τελικά για αυτό υπάρχει ήδη και είναι πολύ εύκολη και γρήγορη. Υπάρχει η Stored Procedure sp_MSforeachtable που αναλαμβάνει να τη διαδικασία του Loop. Για περισσότερες οδηγίες δείτε στα Books online.

Με έξι μόλις γραμμές μπορεί κάποιος να μηδενίσει τη βάση του.

[code:tsql]
--Απενεργοποίηση των Constraints & Triggers
 exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
 exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'

 --Διαγραφή όλων των δεδομένων απο όλους τους πίνακες
 exec sp_MSforeachtable 'DELETE ?'

 --Ενεργοποίηση των Constraints & Triggers again
 exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
 exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

 --Κάνουμε Reset όλα τα Identity fields
 exec sp_MSforeachtable 'IF OBJECTPROPERTY(OBJECT_ID(''?''), ''TableHasIdentity'') = 1 begin DBCC CHECKIDENT (''?'',RESEED,0) END'
[/code]

kick it on KickIt.gr

Categories: SQL Server

Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Comments

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading