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

Le transazioni devono essere gestite in .NET o SQL Server?

Non esiste una regola ferrea, ma vedo diversi motivi per controllare le transazioni dal livello aziendale:

  • Comunicazione oltre i confini dell'archivio dati. Le transazioni non devono essere effettuate contro un RDBMS; possono essere contro una varietà di entità.

  • La possibilità di eseguire il rollback/commettere transazioni in base alla logica aziendale che potrebbero non essere disponibili per la particolare procedura memorizzata che stai chiamando.

  • La possibilità di invocare un insieme arbitrario di query all'interno di una singola transazione. Ciò elimina anche la necessità di preoccuparsi del conteggio delle transazioni.

  • Preferenza personale:c# ha una struttura più elegante per dichiarare le transazioni:a using bloccare. In confronto, ho sempre trovato le transazioni all'interno delle stored procedure ingombranti quando si passa al rollback/commit.

Questo può essere o meno un problema a seconda di quante transazioni vengono aperte (non è chiaro se si tratta di un singolo lavoro o di una procedura eseguita con un'elevata simultaneità). Suggerirei di guardare quali lucchetti vengono posizionati sugli oggetti e per quanto tempo vengono mantenuti quei lucchetti.

Tieni presente che la convalida forse dovrebbe serratura; cosa succede se i dati cambiano tra il momento in cui li hai convalidati e il momento in cui si verifica l'azione?

Se lo è un problema, potresti suddividere la procedura incriminata in due procedure e chiamarne una dall'esterno di un TransactionScope .