-
@@IDENTITY
restituisce l'ultimo valore di identità generato per qualsiasi tabella nella sessione corrente, in tutti gli ambiti. Devi stare attento qui , poiché è in più ambiti. Potresti ottenere un valore da un trigger, invece della tua attuale dichiarazione. -
SCOPE_IDENTITY()
restituisce l'ultimo valore di identità generato per qualsiasi tabella nella sessione corrente e nell'ambito corrente. In genere cosa vuoi usare . -
IDENT_CURRENT('tableName')
restituisce l'ultimo valore di identità generato per una tabella specifica in qualsiasi sessione e in qualsiasi ambito. Ciò ti consente di specificare da quale tabella desideri il valore, nel caso in cui i due precedenti non siano esattamente ciò di cui hai bisogno (molto raro ). Inoltre, come menzionato da @Guy Starbuck, "Puoi usarlo se vuoi ottenere il valore IDENTITY corrente per una tabella in cui non hai inserito un record." -
Il
OUTPUT
clausola delINSERT
istruzione ti consentirà di accedere a ogni riga che è stata inserita tramite tale istruzione. Dal momento che rientra nell'ambito dell'istruzione specifica, è più semplice rispetto alle altre funzioni di cui sopra. Tuttavia, è un po' più dettagliato (dovrai inserire in una tabella variabile/tabella temporanea e quindi interrogarla) e fornisce risultati anche in uno scenario di errore in cui viene eseguito il rollback dell'istruzione. Detto questo, se la tua query utilizza un piano di esecuzione parallela, questo è l'unico metodo garantito per ottenere l'identità (a meno di disattivare il parallelismo). Tuttavia, viene eseguito prima trigger e non può essere utilizzato per restituire valori generati dal trigger.