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

SQL Server - Bedste måde at få identitet for indsat række?

  • @@IDENTITY returnerer den sidst genererede identitetsværdi for enhver tabel i den aktuelle session på tværs af alle omfang. Du skal være forsigtig her , da det er på tværs af scopes. Du kunne få en værdi fra en trigger i stedet for din nuværende erklæring.

  • SCOPE_IDENTITY() returnerer den sidst genererede identitetsværdi for enhver tabel i den aktuelle session og det aktuelle omfang. Generelt hvad du vil bruge .

  • IDENT_CURRENT('tableName') returnerer den sidst genererede identitetsværdi for en specifik tabel i enhver session og ethvert omfang. Dette lader dig angive, hvilken tabel du vil have værdien fra, hvis de to ovenstående ikke er helt, hvad du har brug for (meget sjældent ). Også, som @Guy Starbuck nævnte, "Du kan bruge dette, hvis du vil have den aktuelle IDENTITY-værdi for en tabel, som du ikke har indsat en post i."

  • OUTPUT klausul af INSERT erklæring giver dig adgang til hver række, der blev indsat via den erklæring. Da det er omfattet af den specifikke erklæring, er det mere ligetil end de andre funktioner ovenfor. Det er dog lidt mere detaljeret (du bliver nødt til at indsætte i en tabelvariabel/temp-tabel og derefter forespørge på det), og det giver resultater selv i et fejlscenarie, hvor sætningen rulles tilbage. Når det er sagt, hvis din forespørgsel bruger en parallel eksekveringsplan, er dette den eneste garanterede metode for at få identiteten (mangler at slå parallelisme fra). Det er dog udført før triggere og kan ikke bruges til at returnere trigger-genererede værdier.



  1. Søgning med accent i sqlite (android)

  2. Ved du, hvornår du skal prøve igen eller fejle, når du kalder SQL Server fra C#?

  3. Sådan forbinder du MySQL-database med PHP-websted

  4. SQLite og tilpasset rækkefølge efter