SET IDENTITY_INSERT, a cosa serve?

Ciao a tutti,

..e ben ritrovati. Mi fa piacere che questi post, a volte brevi, a volte più lunghi siano apprezzati! Per questo vi dico un grazie di Cuore. Quello che cerco di fare è di essere sempre il più chiaro possibile. Quindi qual'ora non lo fossi ditemelo pure.. consigli e critiche costruttive sono sempre un regalo. Buona lettura!

Oggi breve articolo sul comando T-SQL SET IDENTITY_INSERT <NOMETABELLA> ON/OFF

 

Il comando SET IDENTITY_INSERT

Diciamo subito a che cosa serve.

Supponiamo di avere una tabella <NOMETABELLA> in cui è definito un campo di tipo identità come ad esempio il campo ID nell'esempio sotto:
 

CREATE TABLE ELENCOTELEFONICO
(ID INT IDENTITY(1,1),
 CODICE VARCHAR(40)
)


Per inserire i dati nella tabella non andrò a specificare un valore per campo ID. Tale valore sarà infatti generato in automatico:

INSERT INTO <NOMETABELLA> (CODICE) VALUES ('AAA')


Tramite il comando SET IDENTITY INSERT <NOMETABELLA> ON  posso andare ad specificare e forzare il campo del campo ID.

Ad esempio:


SET IDENTITY_INSERT ELENCOTELEFONICO ON
INSERT INTO ELENCOTELEFONICO(ID,CODICE) VALUES (1,'BBB')
SET IDENTITY_INSERT ELENCOTELEFONICO OFF

 
Attenzione però a riportare a OFF il valore dell'identity_insert perchè altrimenti tutti gli insert privi del campo ID falliranno perchè l'automatismo che propone il valore per il campo ID è disabilitato.

Infine chiariamo due aspetti importanti che spesso mi vengono chiesti:
  • Il comando vale al di fuori della sessione. Se imposto ad ON l'identity_insert per una tabella qualsiasi applicazione che cercerà di inservi dei dati dovrà inserire un valore anche per il campo identity.
  • E' possibile impostare il valore dell'identity insert a ON solo per una tabella alla volta.



Ciao ed alla prossima!
Luca


Luca Biondi @ SQLServerPerformance blog!








Next post: Ultimo tentativo di accesso a SQL e la "Dedicated Admin Connection" (DAC)

Previous post: Trigger e la funzione UPDATE()

Comments

I Post più popolari

SQL Server, execution plan and the lazy spool (clearly explained)

SQL Server, datetime vs. datetime2

How to solve EXECUTE Permission denied on object 'sp_send_dbmail'