sql >> Database >  >> RDS >> Sqlserver

SQL Server - Beste manier om de identiteit van de ingevoegde rij te krijgen?

  • @@IDENTITY retourneert de laatste identiteitswaarde die is gegenereerd voor een tabel in de huidige sessie, voor alle bereiken. Je moet hier voorzichtig zijn , omdat het over scopes gaat. Je zou een waarde kunnen krijgen van een trigger, in plaats van je huidige statement.

  • SCOPE_IDENTITY() retourneert de laatste identiteitswaarde die is gegenereerd voor een tabel in de huidige sessie en het huidige bereik. Over het algemeen wat u wilt gebruiken .

  • IDENT_CURRENT('tableName') retourneert de laatste identiteitswaarde die is gegenereerd voor een specifieke tabel in elke sessie en elk bereik. Hiermee kunt u specificeren van welke tabel u de waarde wilt hebben, voor het geval de twee bovenstaande niet helemaal zijn wat u nodig heeft (zeer zeldzaam ). Ook, zoals @Guy Starbuck al zei:"Je zou dit kunnen gebruiken als je de huidige IDENTITY-waarde wilt krijgen voor een tabel waarin je geen record hebt ingevoegd."

  • De OUTPUT clausule van de INSERT statement geeft u toegang tot elke rij die via dat statement is ingevoegd. Omdat het is beperkt tot de specifieke instructie, is het meer rechttoe rechtaan dan de andere functies hierboven. Het is echter een beetje meer uitgebreid (u moet in een tabelvariabele/temp-tabel invoegen en die vervolgens opvragen) en het geeft zelfs resultaten in een foutscenario waarbij de instructie wordt teruggedraaid. Dat gezegd hebbende, als uw zoekopdracht een parallel uitvoeringsplan gebruikt, is dit de enige gegarandeerde methode voor het verkrijgen van de identiteit (afgezien van het uitschakelen van parallellisme). Het wordt echter voor . uitgevoerd triggers en kunnen niet worden gebruikt om door triggers gegenereerde waarden te retourneren.



  1. Waarschuwingen en operators gebruiken in SQL Server

  2. Hoe COALESCE() werkt in MariaDB

  3. INITCAP() – Converteren naar begincaps in PostgreSQL

  4. Probleem bij het bouwen van cx_Oracle - libclntsh.so.11.1 => niet gevonden