INSEREIX UNA columna amb el conjunt IDENTITY

Pàgina actualitzada :
Data de creació de la pàgina :

L'SQL Server té una propietat "IDENTITY" que estableix automàticament el número seqüencial de l'1 a una columna específica quan afegiu un registre. Per exemple, si definiu IDENTITAT a la columna A i afegiu 3 registres, la columna A s'emplena automàticament amb valors d'1, 2 i 3 en l'ordre en què els heu afegit.

Fins i tot si utilitzeu una sentència INSERT, el valor s'estableix automàticament, de manera que no hi ha necessitat d'establir explícitament el valor, però crec que hi ha casos en què voleu establir el valor explícitament perquè s'utilitza per a una clau estrangera, etc.

Com a exemple, suposem que hi ha una taula amb la propietat "IDENTITAT" establerta a la columna "ID" tal com es mostra a la figura.

Una sentència INSERT que insereixi un valor en aquesta taula, inclosa la columna D'identificador, tindria aquest aspecte:

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

No obstant això, quan intento executar-lo, crec que apareixerà el següent error.

Msg 544, Nivell 16, Estat 1, Línia 1 Quan IDENTITY_INSERT està definit com a DESACTIVAT, els valors explícits no es poden inserir a la columna d'identitat de la taula 'XXXXX'.

S'assumeix que les columnes que s'estableixen originalment a IDENTITY tenen valors definits automàticament, de manera que no podeu establir explícitament els valors.

Si realment voleu definir-lo, heu d'establir "IDENTITY_INSERT" a "ON" tal com es descriu al missatge d'error. Activeu IDENTITY_INSERT abans d'INSERIR i torneu a Desactivar quan s'hagi completat la inserció, com en l'SQL següent:

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

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

Ara podeu definir explícitament el valor i inserir-lo. INSERT-SELECT utilitzant taules també és vàlid.

Les columnes amb IDENTITAT s'assignen automàticament valors d'1, però si definiu explícitament els valors tal com s'han descrit anteriorment, és possible que us pregunteu quin número s'assignarà a continuació. En aquest cas, el valor següent assignat s'assigna des del número després del valor afegit més alt a la taula, de manera que no hi ha cap valor duplicat quan s'insereix un registre nou. (Hi ha excepcions per discapacitat, etc.)