Eu gostaria de poder verificar facilmente quais identificadores únicos não existem em uma tabela, daqueles fornecidos em uma consulta.
Para explicar melhor, eis o que eu faria agora, para verificar quais IDs da lista "1, 2, 3, 4" não existem em uma tabela:
SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4')
, digamos que a tabela não contém nenhuma linha com ID 2.- Despeje os resultados no Excel
- Execute um PROCV na lista original que procura cada valor de lista na lista de resultados.
- Qualquer PROCV que resulte em um
#N/A
está em um valor que não ocorreu na tabela.
Estou pensando que deve haver uma maneira melhor de fazer isso. Estou procurando, idealmente, por algo como
Lista para verificar -> Consulta na tabela para verificar -> Membros da lista não estão na tabela
Usar
EXCEPT
:Veja SqlFiddle .
O
values
construtor funcionará apenas no SQL Server 2008 ou posterior. Para 2005, useconforme detalhado nesta resposta do SO .
Eu construiria uma variável de tabela ou tabela temporária contendo os IDs que você está procurando ... e use a solução de Remus, menos o açúcar sintático de 2008:
Agora estou alguns anos mais sábio (e tenho um SQL Server mais recente) do que quando fiz essa pergunta, então para comemorar o selo de Pergunta Famosa que recebi por perguntar isso, aqui está o que eu faria agora. (Acho que nunca mais usei o
EXCEPT
operador desde então.)Eu diria que o
LEFT JOIN
método abaixo é mais útil do queEXCEPT
já que você pode compô-lo com outras junções sem precisar de um CTE.