Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 12386|Antwoord: 0

[Bron] SqlServer implementeert de ID van het nieuw ingevoegde record

[Link kopiëren]
Geplaatst op 15-06-2016 11:45:40 | | |

Bron: Internet Auteur: Onbekend

- Databases en tabellen aanmaken

maak database MyDataBase aan

gebruik MyDataBase

maak tabel mytable aan

id int identiteit(1,1),

Naam Varchar(20)



--Voer deze SQL uit om de waarde te vinden van de zelf-incrementele kolom die overeenkomt met het record dat zojuist is ingevoegd

invoegen in mytable-waarden ('Li Si')

Selecteer @@identity

2. Vergelijking van de drie methoden

In SQL Server 2000 zijn er drie vergelijkbare functies: SCOPE_IDENTITY, IDENT_CURRENT en @@IDENTITY, die allemaal waarden teruggeven die in de kolom IDENTITY zijn ingevoegd.

IDENT_CURRENT Geeft de laatst gegenereerde identificatiewaarde terug voor een specifieke tabel in elke sessie en elke scope. IDENT_CURRENT Niet beperkt door scope en sessie, maar door een gespecificeerde tabel. IDENT_CURRENT Retourneert de waarde die voor een specifieke tabel in elke sessie en scope is gegenereerd.

@@IDENTITY Geeft de laatst gegenereerde identificatiewaarde terug voor een tabel in alle scopes van de huidige sessie.

SCOPE_IDENTITY Retourneert de laatst geïdentificeerde waarde die is gegenereerd voor de huidige sessie en elke tabel in de huidige scope

SCOPE_IDENTITY en @@IDENTITY geven de laatste identificatiewaarde terug die in een tabel in de huidige sessie is gegenereerd. Echter, SCOPE_IDENTITY geeft alleen waarden terug die in de huidige scope zijn ingevoegd; @@IDENTITY Niet beperkt tot een specifiek scope.

Er zijn bijvoorbeeld twee tabellen, T1 en T2, waarop een INSERT-trigger is gedefinieerd. Wanneer een rij in T1 wordt ingevoegd, wordt de trigger geactiveerd en wordt er een rij in T2 geplaatst. Dit voorbeeld illustreert twee scopes: één op T1 en één op T2 als gevolg van de trigger.

Aangenomen dat zowel T1 als T2 IDENTITY-kolommen hebben, zullen @@IDENTITY en SCOPE_IDENTITY aan het einde van de INSERT-instructie op T1 verschillende waarden teruggeven.

@@IDENTITY Retourneert de laatste IDENTITY-kolomwaarde die in een scope in de huidige sessie is ingevoegd, wat de waarde is die in T2 is ingevoegd.

SCOPE_IDENTITY() retourneert de IDENTITY-waarde die in T1 is ingevoegd, wat de laatste INSERT is die in dezelfde scope is voorgekomen. Als de SCOPE_IDENTITY()-functie wordt aangeroepen voordat de insertie-instructie in de identiteitskolom in scope plaatsvindt, geeft de functie een NULL-waarde terug.

De waarden die door IDENT_CURRENT('T1') en IDENT_CURRENT('T2') worden teruggegeven, zijn respectievelijk de laatste zelf-incrementele waarden van de twee tabellen.

ajqc's experiment: (40 lokale threads, 40+40 remote threads gelijktijdige test, waarbij 1200W rijen worden ingevoegd), de conclusie is:

1. In typische cascaderende toepassingen. @@IDENTITY kan niet worden gebruikt, en gelijktijdige conflicten zullen optreden wanneer 1W meerrijig wordt gebruikt op CII850, 256M SD-machines. Op P42.8C en 512M DDR is er een gelijktijdig conflict wanneer er slechts meer dan 6000 lijnen zijn.

2.SCOPE_IDENTITY() is absoluut betrouwbaar en kan worden gebruikt in het opslagproces, zelfs triggers hoeven niet gebouwd te worden en er zijn geen gelijktijdige conflicten

SELECT IDENT_CURRENT('TableName') - Geeft de laatst gegenereerde labelwaarde terug in de opgegeven tabel

SELECT IDENT_INCR('TableName') - retourneert de gemarkeerde veld-incrementwaarde voor de opgegeven tabel

SELECT IDENT_SEED('TableName') - geeft de gemarkeerde veldseed van de opgegeven tabel terug

Geeft het automatische nummer van het laatst ingevoegde record terug.

SELECTEER IDENT_CURRENT('TableName')

Keer terug naar het volgende automatische nummer:

SELECTEER IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))

SELECT @@IDENTITY - Retourneert de laatst gemarkeerde waarde die in alle tabellen in de huidige sessie is gegenereerd








Vorig:SQLServer implementeert de universele methode om strings te splitsen
Volgend:Deel een nuttig zoekartefact
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com