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!