SCOPE_IDENTITY

domenica 15 novembre 2009 - 18.52

dompa72 Profilo | Senior Member

Sto scrivendo una funzione dove ci sono tre tabelle (t1, t2, t3), tutte hanno un campo ID incrementale. La tab. t2 ha un campo con il valore ID di t1 e la tab t3 ha i campi con i valori di ID di t1 e t2. Ho scritto una funzione per l'inserimento dei valori con semplici stringhe SQL insert che restituisce il valore ID tramite SCOPE_IDENTITY ed in successione popola t2 e t3.
Se non ci sono interruzioni tutto funziona bene, ma purtroppo ci possono essere delle interruzioni ti spegnimento del PC causa mancanza corrente o cadute di rete quindi ho la necessità di scrivere tutto con una "SqlTransaction" per effettuare un rollback in caso di necessità. Dimenticavo di scrivere che la funzione è in uso per più utenti contemporanei.
Volevo sapere cosa restituisce lo SCOPE_IDENTITY in una transazione se due utenti in contemporanea effettuano un insert su t1 ma non è stato ancora eseguito il commit??? Se il primo fa il Rollback ed il secondo il comit i dati sono sempre coerenti?
Grazie e spero di essere stato abbastanza chiaro

lbenaglia Profilo | Guru

>Volevo sapere cosa restituisce lo SCOPE_IDENTITY in una transazione
>se due utenti in contemporanea effettuano un insert su t1 ma
>non è stato ancora eseguito il commit???

Ciao Domenico,

La funzione SCOPE_IDENTITY() restituisce l'ultimo valore inserito in una colonna identity nello stesso scope.
Anche se c'è una transazione aperta all'atto della INSERT viene restituito l'ultimo valore identity.
I due utenti otterranno due valori differenti dato che gli scope sono anch'essi differenti.

>Se il primo fa il Rollback
>ed il secondo il comit i dati sono sempre coerenti?
Certo. Anche in caso di rollback, la transazione successiva otterrà un nuovo valore di identity (non viene riciclato il valore relativo alla transazione annullata), lasciando una sorta di "buco" nella sequenza.

>Grazie e spero di essere stato abbastanza chiaro
Prego.

Ciao!

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

dompa72 Profilo | Senior Member

Grazie mille, in questo modo posso modificare senza problemi il codice senza modificare le logiche
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