Dubbio su una stored procedure

giovedì 13 dicembre 2007 - 10.43

stena Profilo | Junior Member

Ho una stored procedure che in determinati momenti mi cancella tutti i record tramite l'ultimo inserito.
Poichè ogni record ha un campo id incrementale, prima di eseguire la cancellazione verifico il valore dell'ultimo id e quindi non cancello il record relativo.
Il mio dubbio è questo: se dopo aver controllato l'id dell'ultimo record e prima di eseguire la cancellazione, avviene l'inserimento di un nuovo record in tabella, come si comporta sql ?

grazie per eventuali delucidazioni

lbenaglia Profilo | Guru

>Il mio dubbio è questo: se dopo aver controllato l'id dell'ultimo
>record e prima di eseguire la cancellazione, avviene l'inserimento
>di un nuovo record in tabella, come si comporta sql ?
Si comporta che se non utilizzi un elevato Isolation Level ed una transazione esplicita che inglobi le due operazioni (con tutti i problemi di scalabilità che ne derivano), la nuova riga viene accodata (quindi rimarranno n+1 righe nella tabella).
Se ho capito bene vuoi eliminare tutte le righe che abbiamo l'ID minore del più alto valore calcolato.
Potresti risolvere il problema unificando le due azioni in una sola (quindi tramite un'unica transazione implicita):

USE tempdb; CREATE TABLE dbo.Students( StudentID int NOT NULL IDENTITY PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); INSERT dbo.Students VALUES('Lorenzo', 'Benaglia'); INSERT dbo.Students VALUES('Luca', 'Bianchi'); INSERT dbo.Students VALUES('Andrea', 'Montanari'); INSERT dbo.Students VALUES('Marcello', 'Poletti'); SELECT * FROM dbo.Students; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 1 Lorenzo Benaglia 2 Luca Bianchi 3 Andrea Montanari 4 Marcello Poletti (4 row(s) affected) */ /* Elimino tutti gli studenti ad esclusione ** di Marcello */ DELETE dbo.Students WHERE StudentID < ( SELECT MAX(StudentID) FROM dbo.Students ); SELECT * FROM dbo.Students; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 4 Marcello Poletti (1 row(s) affected) */ DROP TABLE dbo.Students;

>grazie per eventuali delucidazioni
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stena Profilo | Junior Member

Perfetto.
Ti ringrazio
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5