INSERAREA unei coloane cu set DE IDENTITĂȚI

Pagina actualizată :
Data creării paginii :

SQL Server are o proprietate "IDENTITATE" care setează automat numărul secvențial de la 1 la o anumită coloană atunci când adăugați o înregistrare. De exemplu, dacă setați IDENTITATE în coloana A și adăugați 3 înregistrări, coloana A este populată automat cu valori de 1, 2 și 3 în ordinea în care le-ați adăugat.

Chiar dacă utilizați o instrucțiune INSERT, valoarea este setată automat, deci nu este nevoie să setați în mod explicit valoarea, dar cred că există cazuri în care doriți să setați valoarea în mod explicit, deoarece este utilizată pentru o cheie străină etc.

De exemplu, să presupunem că există un tabel cu proprietatea "IDENTITATE" setată în coloana "ID", așa cum se arată în figură.

O instrucțiune INSERARE care inserează o valoare în acest tabel, inclusiv coloana ID, ar arăta astfel:

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

Cu toate acestea, când încerc să-l rulez, cred că va apărea următoarea eroare.

MSG 544, Nivel 16, Stat 1, Linia 1 Când IDENTITY_INSERT este setată la DEZACTIVAT, valorile explicite nu pot fi inserate în coloana de identitate a tabelului "XXXXX".

Coloanele care sunt setate inițial la IDENTITATE se presupune că au valori setate automat, astfel încât să nu puteți seta în mod explicit valorile.

Dacă doriți cu adevărat să o setați, trebuie să setați "IDENTITY_INSERT" la "ON", așa cum este descris în mesajul de eroare. Activați IDENTITY_INSERT înainte de INSERARE și reveniți la DEZACTIVAT atunci când inserarea este finalizată, ca în următorul SQL:

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

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

Acum puteți seta în mod explicit valoarea și o puteți insera. INSERT-SELECT utilizând tabele este, de asemenea, valabil.

Coloanele cu IDENTITATE sunt atribuite automat valorilor de la 1, dar dacă setați în mod explicit valorile așa cum este descris mai sus, este posibil să vă întrebați ce număr va fi atribuit în continuare. În acest caz, următoarea valoare atribuită este atribuită din numărul după cea mai mare valoare adăugată la tabel, astfel încât nu există nicio valoare dublată atunci când se inserează o nouă înregistrare. (Cu toate acestea, există excepții din cauza dizabilităților etc.)