INSERT INTO [dbo].[Item_B] ( [ItemId] , [Cod_db] )
SELECT [ItemId] , [Cod_db] FROM [dbo].[Item_A]
Se un campo è una IDENTITY :
[ItemId] [int]
IDENTITY(1,1) NOT NULL,
si ottiene un errore :
Messaggio 544, livello 16, stato 1, riga 2
Quando IDENTITY_INSERT è OFF non è possibile inserire un
valore esplicito per la colonna Identity nella tabella 'Item_B'.
Questo è ovvio perchè si suppone che un campo IDENTITY non debba essere inserito ma autocalcolato. Il problema nasce quando ad esempio si vogliono ribaltare tutte le righe di una tabella in un'altra simile, come nell'esempio dove abbiamo supposto due tabelle Item_A e Item_B uguali.
La soluzione è disabilitare l'IDENTITY prima di procedere all'inserimento:
SET IDENTITY_INSERT [Item_B]
ON
Questo comando permette di inserire anche in un campo IDENTITY.
Dopo l'inserimento è meglio ripristinare l'IDENTITY,cioè impedire futuri inserimenti :
SET IDENTITY_INSERT [Item_B]OFF