sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server - Bästa sättet att få identiteten för den infogade raden?

  • @@IDENTITY returnerar det senast genererade identitetsvärdet för en tabell i den aktuella sessionen, över alla scopes. Du måste vara försiktig här , eftersom det är över räckvidden. Du kan få ett värde från en utlösare istället för ditt nuvarande uttalande.

  • SCOPE_IDENTITY() returnerar det senast genererade identitetsvärdet för en tabell i den aktuella sessionen och det aktuella omfånget. Generellt vad du vill använda .

  • IDENT_CURRENT('tableName') returnerar det senaste identitetsvärdet som genererats för en specifik tabell i valfri session och valfritt omfång. Detta låter dig specificera vilken tabell du vill ha värdet från, om de två ovanstående inte är riktigt vad du behöver (mycket sällsynt ). Dessutom, som @Guy Starbuck nämnde, "Du kan använda detta om du vill få det aktuella IDENTITY-värdet för en tabell som du inte har infogat en post i."

  • OUTPUT satsen i INSERT uttalandet låter dig komma åt varje rad som infogades via det uttalandet. Eftersom det är anpassat till det specifika uttalandet är det enklare än de andra funktionerna ovan. Det är dock lite mer utförligt (du måste infoga i en tabellvariabel/temp-tabell och sedan fråga den) och det ger resultat även i ett felscenario där satsen rullas tillbaka. Som sagt, om din fråga använder en parallell exekveringsplan är detta den enda garanterade metoden för att få identiteten (brist på att stänga av parallellism). Den körs dock före triggers och kan inte användas för att returnera triggergenererade värden.



  1. hur skickar du e-post med Pl/sql

  2. Återställer raderad "root"-användare och lösenord för MySQL

  3. Flera infoga SQL-oracle

  4. Hur CONCAT_WS() fungerar i PostgreSQL