quinta-feira, 22 de julho de 2010

índices UNIQUE com opção IGNORE_DUP_KEY

Podemos criar índices clusterizados e não clusterizados do tipo UNIQUE, e fazer uso da opção IGNORE_DUP_KEY, para que as inserções ignorem valores duplicados, mas insiram os outros valores (bastante úteis em INSERT/SELECTS que podem envolver duplicidade). Acompanhe o exemplo:

 

CREATE TABLE clientessistema(

      [codigo] [int],

      [nome] VARCHAR(150),

      [CPF] [varchar](11) NULL

)

GO

 

INSERT INTO clientessistema(codigo,nome,cpf)

values (1,'Rodrigo Ribeiro','01657317966')

INSERT INTO clientessistema(codigo,nome,cpf)

values (2,'Rodrigo Ribeiro','01657317967')

 

 

CREATE TABLE clientessistema_key(

      [codigo] [int],

      [nome] VARCHAR(150),

      [CPF] [varchar](11) NULL

)

GO

 

CREATE UNIQUE INDEX IX_UNIQUE_TMP_CLIENTE

ON clientessistema_key(CPF)

WITH (IGNORE_DUP_KEY=ON)

GO

 

Acima, criamos duas tabelas e em uma delas um INDEX do tipo UNIQUE com a opção de IGNORE_DUP_KEY. Vamos inserir um registro na tabela clientessistema_key, com um valor no campo CPF que já existe na tabela clientessistema.

 

INSERT INTO clientessistema_key(codigo,nome,cpf)

values (1,'Rodrigo Ribeiro','01657317966')

 

Agora, vamos tentar um INSERT/SELECT na tabela clientessistema_key com os valores de clientessistema.

 

INSERT clientessistema_key(codigo,nome,cpf)

SELECT

      codigo,

      nome,

      cpf

FROM

      Clientessistema

 

Para o insert acima, a mensagem abaixo é gerada, informando que um registro com valor duplicado foi ignorado, porém o que não violava o critério UNIQUE do índice foi inserido.

 

      Duplicate key was ignored.

 

      (1 row(s) affected)

 

E na tabela clientessistema_key temos apenas dois registros.

 

Até a próxima!

 

Nenhum comentário:

Postar um comentário

Leave your comment here!