>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