Como inserir um valor numa coluna auto_increment / identity

Sem Comentários

Por vezes criámos tabelas, na maioria secundárias, às quais atribuímos a propriedade de “identity” a um campo que irá funcionar como chave. Assim, não temos que nos preocupar com a numeração e consistência dessa mesma chave pois sempre que é acrescentado um novo registo, o engine do MS SQL trata de incrementar o contador e atribuir um novo valor a esse campo. Mas o que acontece quando queremos ser nós a atribuir esse valor? É simples, não nos é permitido.

Exemplo:

Esta é a nossa tabela…

CREATE TABLE [teste] (
[id] [int] identity (1, 1) NOT NULL,
[nome] [nvarchar] (255) NOT NULL,
constraint [pk_teste] PRIMARY KEY clustered
([id]) ON [PRIMARY]
) ON [PRIMARY]

…e este é o nosso insert, o qual não irá funcionar pois estámos a tentar atribuir um valor (3) a um campo que é identity (id).

INSERT INTO teste (id, nome) VALUES (3,’um texto qualquer’)

Para que o nosso insert funcione temos que em primeiro lugar activar o insert em identities…

SET identity_insert [teste] ON

…só depois fazemos o nosso insert…

INSERT INTO teste (id, nome) VALUES (1,’um texto qualquer’)

…e finalmente voltamos a desactivar o insert em identities.

SET identity_insert [teste] off

Resumindo:

SET identity_insert [teste] ON
INSERT INTO teste (id, nome) VALUES (1,’um texto qualquer’)
SET identity_insert [teste] off

Ter em atenção que o facto de termos colocado um valor manualmente numa coluna identity, não influencia o incremento. Isto é, no próximo insert, o valor atribuído à coluna “id” irá ser sempre o valor máximo + 1.
Alguma dúvida? Basta comentar.

Leave a Reply