Een kolom invoegen met identiteitsset

Pagina bijgewerkt :
Aanmaakdatum van pagina :

SQL Server heeft een eigenschap 'IDENTITY' waarmee het volgnummer automatisch wordt ingesteld van 1 naar een specifieke kolom wanneer u een record toevoegt. Als u bijvoorbeeld IDENTITEIT instelt in kolom A en 3 records toevoegt, wordt kolom A automatisch gevuld met waarden 1, 2 en 3 in de volgorde waarin u ze hebt toegevoegd.

Zelfs als je een INSERT-instructie gebruikt, wordt de waarde automatisch ingesteld, dus het is niet nodig om de waarde expliciet in te stellen, maar ik denk dat er gevallen zijn waarin je de waarde expliciet wilt instellen omdat deze wordt gebruikt voor een refererende sleutel etc.

Stel dat er een tabel is met de eigenschap "IDENTITY" ingesteld in de kolom "ID" zoals weergegeven in de afbeelding.

Een INSERT-instructie waarmee een waarde in deze tabel wordt ingevoegd, inclusief de kolom ID, ziet er als volgt uit:

insert into [テーブル名] ([ID], [Value]) values (1, 1)

Wanneer ik het echter probeer uit te voeren, denk ik dat de volgende fout zal verschijnen.

Msg 544, Niveau 16, Staat 1, Lijn 1 Wanneer IDENTITY_INSERT is ingesteld op UIT, kunnen expliciete waarden niet worden ingevoegd in de identiteitskolom van tabel 'XXXXX'.

Kolommen die oorspronkelijk zijn ingesteld op IDENTITEIT, worden verondersteld automatisch waarden in te stellen, dus u kunt de waarden niet expliciet instellen.

Als u het echt wilt instellen, moet u "IDENTITY_INSERT" instellen op "AAN" zoals beschreven in het foutbericht. Schakel IDENTITY_INSERT IN voordat u invoegt en ga terug naar UIT wanneer de insert is voltooid, zoals in de volgende SQL:

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

U kunt nu expliciet de waarde instellen en invoegen. INSERT-SELECT met behulp van tabellen is ook geldig.

Kolommen met IDENTITEIT krijgen automatisch waarden toegewezen vanaf 1, maar als u de waarden expliciet instelt zoals hierboven beschreven, vraagt u zich misschien af welk nummer vervolgens wordt toegewezen. In dit geval wordt de volgende toegewezen waarde toegewezen op basis van het nummer na de hoogste waarde die aan de tabel is toegevoegd, zodat er geen dubbele waarde is wanneer een nieuwe record wordt ingevoegd. (Er zijn echter uitzonderingen vanwege handicaps, enz.)