VSTAVLJANJE stolpca z naborom IDENTITETA

Stran posodobljena :
Datum ustvarjanja strani :

SQL Server ima lastnost »IDENTITY«, ki samodejno nastavi zaporedno številko od 1 do določenega stolpca, ko dodate zapis. Če na primer v stolpcu A nastavite IDENTITETO in dodate 3 zapise, se stolpec A samodejno napolni z vrednostmi 1, 2 in 3 v vrstnem redu, v katerem ste jih dodali.

Tudi če uporabite izjavo INSERT, je vrednost nastavljena samodejno, tako da ni treba izrecno nastaviti vrednosti, vendar mislim, da obstajajo primeri, ko želite nastaviti vrednost izrecno, ker se uporablja za tuj ključ itd.

Recimo, da je v stolpcu »ID« nastavljena tabela z lastnostjo »IDENTITY«, kot je prikazano na sliki.

Izjava INSERT, ki vstavi vrednost v to tabelo, vključno s stolpcem ID, bi bila videti tako:

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

Vendar, ko ga poskušam zagnati, mislim, da se bo pojavila naslednja napaka.

Msg 544, stopnja 16, stanje 1, vrstica 1 Ko IDENTITY_INSERT na OFF, izrecnih vrednosti ni mogoče vstaviti v stolpec identitete tabele "XXXXX".

Za stolpce, ki so prvotno nastavljeni na IDENTITETO, se domneva, da imajo vrednosti nastavljene samodejno, zato vrednosti ne morete izrecno nastaviti.

Če ga želite resnično nastaviti, morate nastaviti »IDENTITY_INSERT« na »ON« kot je opisano v sporočilu o napaki. Pred vstavljanjem IDENTITY_INSERT vklopite in nazaj na izklop, ko je vstavek dokončan, kot v naslednjem SQL:

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

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

Zdaj lahko izrecno nastavite vrednost in jo vstavite. VSTAVI-SELECT z uporabo tabel je veljaven tudi.

Stolpci z identiteto so samodejno dodeljene vrednosti iz 1, če pa izrecno nastavite vrednosti, kot je opisano zgoraj, se morda sprašujete, katere številke bodo naslednje dodeljene. V tem primeru je naslednja dodeljena vrednost dodeljena iz številke za najvišjo dodano vrednostjo v tabelo, tako da ob vstavitvi novega zapisa ni podvojene vrednosti. (Vendar pa obstajajo izjeme zaradi invalidnosti itd.)