Como inserir um valor numa coluna auto_increment / identity
Jan 10
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.
RSS