INSERIRE una colonna con SET IDENTITY

Pagina aggiornata :
Data di creazione della pagina :

SQL Server dispone di una proprietà "IDENTITY" che imposta automaticamente il numero sequenziale da 1 a una colonna specifica quando si aggiunge un record. Ad esempio, se si imposta IDENTITY nella colonna A e si aggiungono 3 record, la colonna A viene popolata automaticamente con i valori 1, 2 e 3 nell'ordine in cui sono stati aggiunti.

Anche se si utilizza un'istruzione INSERT, il valore viene impostato automaticamente, quindi non è necessario impostare esplicitamente il valore, ma penso che ci siano casi in cui si desidera impostare il valore in modo esplicito perché viene utilizzato per una chiave esterna ecc.

Ad esempio, supponiamo che ci sia una tabella con la proprietà "IDENTITY" impostata nella colonna "ID", come mostrato nella figura.

Un'istruzione INSERT che inserisce un valore in questa tabella, inclusa la colonna ID, è simile alla seguente:

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

Tuttavia, quando provo a eseguirlo, penso che apparirà il seguente errore.

Messaggio 544, livello 16, stato 1, riga 1 Quando IDENTITY_INSERT è impostato su OFF, non è possibile inserire valori espliciti nella colonna identità della tabella 'XXXXX'.

Si presume che le colonne originariamente impostate su IDENTITY abbiano valori impostati automaticamente, quindi non è possibile impostare in modo esplicito i valori.

Se vuoi davvero impostarlo, devi impostare "IDENTITY_INSERT" su "ON" come descritto nel messaggio di errore. Attivare IDENTITY_INSERT prima di INSERIRE e tornare a OFF al termine dell'inserimento, come nel seguente SQL:

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

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

È ora possibile impostare in modo esplicito il valore e INSERIRLO. È valido anche INSERT-SELECT utilizzando le tabelle.

Alle colonne con IDENTITY vengono assegnati automaticamente valori da 1, ma se si impostano in modo esplicito i valori come descritto sopra, è possibile che ci si stia chiedendo quale numero verrà assegnato successivamente. In questo caso, il valore successivo assegnato viene assegnato dal numero dopo il valore più alto aggiunto alla tabella, quindi non vi è alcun valore duplicato quando viene inserito un nuovo record. (Tuttavia, ci sono eccezioni dovute a disabilità, ecc.)