Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
SCOPE_IDENTITY
domenica 15 novembre 2009 - 18.52
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
dompa72
Profilo
| Senior Member
245
messaggi | Data Invio:
dom 15 nov 2009 - 18:52
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
5.625
messaggi | Data Invio:
dom 15 nov 2009 - 19:00
>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
245
messaggi | Data Invio:
dom 15 nov 2009 - 19:09
Grazie mille, in questo modo posso modificare senza problemi il codice senza modificare le logiche
Torna su
Stanze Forum
Elenco Threads
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 !