INFOGA en kolumn med IDENTITY-uppsättning

Sidan uppdaterad :
Datum för skapande av sida :

SQL Server har egenskapen "IDENTITY" som automatiskt anger det sekventiella numret från 1 till en specifik kolumn när du lägger till en post. Om du till exempel anger IDENTITET i kolumn A och lägger till 3 poster fylls kolumn A automatiskt i med värdena 1, 2 och 3 i den ordning som du lade till dem.

Även om du använder en INSERT-sats ställs värdet in automatiskt, så det finns inget behov av att uttryckligen ställa in värdet, men jag tror att det finns fall där du vill ställa in värdet uttryckligen eftersom det används för en främmande nyckel etc.

Anta till exempel att det finns en tabell med egenskapen "IDENTITY" inställd i kolumnen "ID" som visas i figuren.

En INSERT-instruktion som infogar ett värde i den här tabellen, inklusive ID-kolumnen, skulle se ut så här:

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

Men när jag försöker köra det tror jag att följande fel kommer att visas.

Msg 544, nivå 16, stat 1, linje 1 När IDENTITY_INSERT är inställt på AV kan explicita värden inte infogas i identitetskolumnen i tabellen "XXXXX".

Kolumner som ursprungligen är inställda på IDENTITY antas ha värden inställda automatiskt, så du kan inte uttryckligen ange värdena.

Om du verkligen vill ställa in det måste du ställa in "IDENTITY_INSERT" till "PÅ" enligt beskrivningen i felmeddelandet. Aktivera IDENTITY_INSERT innan du INFOGAR och tillbaka till AV när infogningen är klar, som i följande SQL:

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

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

Du kan nu uttryckligen ange värdet och INFOGA det. INSERT-SELECT med tabeller är också giltigt.

Kolumner med IDENTITY tilldelas automatiskt värden från 1, men om du uttryckligen anger värdena enligt beskrivningen ovan kanske du undrar vilket nummer som ska tilldelas härnäst. I det här fallet tilldelas nästa tilldelade värde från numret efter det högsta mervärdet som lagts till i tabellen, så det finns inget dubblettvärde när en ny post infogas. (Det finns dock undantag på grund av funktionshinder etc.)