martedì 21 maggio 2013

abilitare inserimento di un campo IDENTITY

Quando si vogliono inserire delle righe in una tabella con un campo IDENTITY si ha il problema che il campo IDENTITY impedisce un inserimento diretto del campo:

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 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

Nessun commento:

Posta un commento