INDSÆT en kolonne med IDENTITY-sæt

Side opdateret :
Dato for oprettelse af side :

SQL Server har egenskaben "IDENTITY", der automatisk angiver det sekventielle tal fra 1 til en bestemt kolonne, når du tilføjer en post. Hvis du f.eks. angiver IDENTITY i kolonne A og tilføjer 3 poster, udfyldes kolonne A automatisk med værdierne 1, 2 og 3 i den rækkefølge, du har tilføjet dem i.

Selvom du bruger en INSERT-sætning, indstilles værdien automatisk, så der er ingen grund til eksplicit at indstille værdien, men jeg tror, at der er tilfælde, hvor du vil indstille værdien eksplicit, fordi den bruges til en fremmed nøgle osv.

Antag f.eks., at der er en tabel med egenskaben "IDENTITET" angivet i kolonnen "ID" som vist i figuren.

En INSERT-sætning, der indsætter en værdi i denne tabel, herunder kolonnen ID, vil se sådan ud:

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

Men når jeg prøver at køre det, tror jeg, at følgende fejl vises.

Msg 544, niveau 16, stat 1, linje 1 Når IDENTITY_INSERT er angivet til FRA, kan eksplicitte værdier ikke indsættes i identitetskolonnen i tabellen "XXXXX".

Kolonner, der oprindeligt er angivet til IDENTITET, antages at have værdier angivet automatisk, så du kan ikke eksplicit angive værdierne.

Hvis du virkelig vil indstille det, skal du indstille "IDENTITY_INSERT" til "ON" som beskrevet i fejlmeddelelsen. Slå IDENTITY_INSERT TIL før INDSÆTTELSE, og tilbage til OFF, når indsættelsen er fuldført, som i følgende SQL:

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

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

Du kan nu eksplicit indstille værdien og INDSÆTTE den. INSERT-SELECT ved hjælp af tabeller er også gyldig.

Kolonner med IDENTITY tildeles automatisk værdier fra 1, men hvis du eksplicit angiver værdierne som beskrevet ovenfor, undrer du dig måske over, hvilket nummer der tildeles næste gang. I dette tilfælde tildeles den næste tildelte værdi fra nummeret efter den højeste værditilvækst til tabellen, så der er ingen duplikatværdi, når en ny post indsættes. (Der er dog undtagelser på grund af handicap osv.)