Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:il modo migliore per ottenere l'identità della riga inserita?

  • @@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 del INSERT 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.