Uno Snapshot ti salva la vita
Una classica best practice in tema di modifica dati di un database recita "Always Write a SELECT Statement That Does Not Modify Data Before You Actually Modify Data". In altre parole: "prima di fare danni con una query di UPDATE o DELETE, fai una SELECT di quei dati che ti appresti a modificare allo scopo di guardare coi tuoi occhi le righe che ti appresti a cambiari."
Io ci aggiungerei anche queste:
- il provvidenziale BACKUP - meglio se con l'opzione WITH COPY_ONLY (valido solo da SQL 2005)
- l'utilizzo di transazioni implicite, che possiamo impostare a livello di sessione con lo statement "SET IMPLICIT_TRANSACTIONS ON" e che ci obbliga a lanciare un COMMIT TRANSACTION per rendere effettive le modifiche (oppure un "SET IMPLICIT_TRANSACTIONS OFF" per tornare alla modalità standard di autocommit). Questo perchè, in modalità IMPLICIT, un singolo statement SQL fa aprire una transazione che deve essere esplicitamente committ-ata o rollback-ata.
- ricorrere a uno SNAPSHOT di database, grazie al quale sarà possibile ripristinare le righe accidentalmente modificate o cancellate e gli oggetti DROP-pati e ALTER-ati, e persino il ripristino completo del datbase alla situazione precedente allo SNAPSHOT con uno speciale RESTORE di database basato appunto sullo SNAPSHOT, come in questo esempio:
RESTORE DATABASE AdventureWorks
FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbsnapshot_di_sicurezza'