While @@Fetch_Status = 0
Begin
INSERT INTO [server].MyDatabase.dbo.Mytabletobeinserted (
UPC,
Sale_date)
VALUES(
@UPC,
@Sale_date)
'Inserting the error trapping here'
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION;
RETURN;
END
Update t_sale_from_pos
set been_sent = 'y'
where UPC = @UPC and [email protected]_date
Fetch Next from CursorSale
into
@UPC,
@Sale_date
end
close CursorSale
deallocate CursorSale
Questa procedura memorizzata viene eseguita ogni giorno con uno scheduler ei dati vengono passati sulla rete. Quando si esegue questa stored procedure e quindi lungo il processo di esecuzione, si verifica un improvviso timeout di rete. Questo esegue ogni riga da inviare all'altro server sulla rete. Come si influisce sui dati utilizzando cicli con transazione di rollback
Ora, il mio problema è:
- Quali saranno le conseguenze i dati chiamando l'operazione di rollback all'interno del ciclo?
- Leggerà di nuovo tutte le righe e lo invierà al server per l'inserimento o leggerà solo la riga dove fallisce durante l'esecuzione?
Hai bisogno di un consiglio. Grazie
C'è un motivo particolare per cui si sta facendo questo con un cursore invece di un inserto seguito da un aggiornamento all'interno di una transazione? – peterm
Poiché questa tabella contiene migliaia di dati all'interno, deve essere posizionata su un cursore in modo che il server non sia troppo occupato durante questa esecuzione. È una cattiva pratica? – Androidz
@Androidz - sì, questo genererà un sacco di lavoro in più per il database che farlo come un set. Nella mia esperienza, questa mitica "best practice" di fare blocchi di righe è diffusa dagli amministratori di database che non possono essere disturbati a gestire il registro delle transazioni e gli spazi tabella in modo appropriato per il carico di lavoro. – LoztInSpace