SQL Server scope

martedì 04 gennaio 2011 - 13.19

Defkon1 Profilo | Newbie

sto giocando con le funzioni @@IDENTITY, IDENT_CURRENT() e SCOPE_IDENTITY() e sto avendo alcune difficoltà a tracciare/comprendere gli ambiti (scope)...

nella documentazione ho trovato che quando si lavora con queste tre funzioni è fondamentale ragionare su Session Scope (quale connessione ha prodotto il valore), il Table Scope (quale tabella ha prodotto il valore) e lo Statement Scope (quale espressione ha prodotto il valore), e a seconda della funzione utilizzata si ha una diversa granularità di controllo su questi ambiti.

per il tipo di utilizzo che ho in mente (un unico database con accesso da multipli client) la soluzione più pulita mi sembra essere l'utilizzo dello SCOPE_IDENTITY (consigliata anche dalla documentazione), ma quello che non ho ancora capito bene è se accedere con utenti differenti al db ha effetto o meno sul session scope (e/o sullo SPID), dato che il database e pertanto la relativa connessione rimangono i medesimi.

grazie in anticipo

--------------------------------------------------

Defkon1
Project Manager/.NET Developer
http://www.alessiomarinelli.it

alx_81 Profilo | Guru

>per il tipo di utilizzo che ho in mente (un unico database con
>accesso da multipli client) la soluzione più pulita mi sembra
>essere l'utilizzo dello SCOPE_IDENTITY (consigliata anche dalla
>documentazione), ma quello che non ho ancora capito bene è se
>accedere con utenti differenti al db ha effetto o meno sul session
>scope (e/o sullo SPID), dato che il database e pertanto la relativa
>connessione rimangono i medesimi.
lo SCOPE_IDENTITY() di consente di essere sicuro di ottenere l'ultimo identity inserito indipendentemente dall'utente che esegue.
Quindi sei coperto sempre a livello di sessione. Anche @@Identity sarebbe sicuro a livello di sessione, se non che è estesa anche al di fuori dello scope corrente (tipico esempio: un trigger generato dalla insert su di una tabella. Se questo trigger genera un identity altrove, otterrai quello con @@Identity, mentre quello della prima tabella lo potrai avere con SCOPE_IDENTITY()).

>grazie in anticipo
di nulla!

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5