Select @@IDENTITY oppure OUTPUT INSERTED.nomeCampoID

lunedì 01 marzo 2010 - 10.36

ridaria Profilo | Expert

Ciao amici,

finora per recuparare l'id del record appena immesso ho sempre usato Select @@IDENTITY.

Ho appena scoperto invece la clausola OUTPUT INSERTED.nomeCampoID
Quale delle due è migliore?

Quali sono le differenze?


Grazie
Riccardo D'Aria

alx_81 Profilo | Guru

>Ciao amici,
ciao

>finora per recuparare l'id del record appena immesso ho sempre
>usato Select @@IDENTITY.
>Ho appena scoperto invece la clausola OUTPUT INSERTED.nomeCampoID
>Quale delle due è migliore?
>Quali sono le differenze?
a dire il vero la migliore è una terza, la SCOPE_IDENTITY()
http://msdn.microsoft.com/it-it/library/ms190315.aspx

all'interno del link vedrai le differenze con @@IDENTITY.
La clausola output consente la creazione di una tabella che possiede i campi inseriti, modificati o cancellati, in base all'istruzione che si utilizza (insert, update, delete). Diciamo che con essa puoi avere un resultset di output che puoi salvare e riutilizzare in seguito. Non è specifica per le colonne identity, ma si allarga anche all'intero resultset.

>Grazie
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

ridaria Profilo | Expert

ti ringrazio per la risposta, ma tra scope-identity, @@identity, e output, l'unica che sono riuscito a far funzionare in una query di tipo UPDATE è stata OUTPUT.


Spero per banali motivi di sintassi.
E se è così potresti indicarmi la sintassi giusta per utilizzare la scope_Identity anche in istruzioni di UPDATE?


Grazie ancora
Riccardo D'Aria

alx_81 Profilo | Guru

>ti ringrazio per la risposta, ma tra scope-identity, @@identity,
>e output, l'unica che sono riuscito a far funzionare in una query
>di tipo UPDATE è stata OUTPUT.
certo, se fai update è corretto. Ma in tal caso non ti serve sapere l'identity.. mica lo puoi modificare..

>Spero per banali motivi di sintassi.
>E se è così potresti indicarmi la sintassi giusta per utilizzare
>la scope_Identity anche in istruzioni di UPDATE?
non si può


--

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

ridaria Profilo | Expert

>>ti ringrazio per la risposta, ma tra scope-identity, @@identity,
>>e output, l'unica che sono riuscito a far funzionare in una query
>>di tipo UPDATE è stata OUTPUT.
>certo, se fai update è corretto. Ma in tal caso non ti serve
>sapere l'identity.. mica lo puoi modificare..
Ok allora con update uso OUTPUT, giusto!?

dimmi, se uso OUTPUT anche per insert into è una cosa sbagliata?
Nel senso faccio una castroneria che mi può comportare degli errori di difficile comprensione e/o intercettazione?

Grazie


>
>
>--
>
>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
>

Riccardo D'Aria

alx_81 Profilo | Guru

>Ok allora con update uso OUTPUT, giusto!?
se ti serve sapere qual è o quali sono i record modificati, sì.

>dimmi, se uso OUTPUT anche per insert into è una cosa sbagliata?
>Nel senso faccio una castroneria che mi può comportare degli
>errori di difficile comprensione e/o intercettazione?
sinceramente non capisco perchè dovresti usare la output, ma è un limite poichè non conosco la situazione reale.
Detto questo, di solito, faccio delle stored procedure che in insert mi tornano la scope_identity() e in update controllo se è stato fatto o meno l'aggiornamento. Se poi a te serve altro, usa pure la output.

--

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