Cuidado com o IF Exists 3
De: Medina, Edvaldo
Enviada em: terça-feira, 27 de outubro de 2009 09:33
Para: Amorim, Fabiano
Assunto: ENC: Cuidado com o IF EXISTS…
Prioridade: Alta
Fabiano, uma pergunta.
Se tivermos um IF com vários EXISTS com AND o SQL vai realizar todas as consultas ou no primeiro que for falso o sistema já finaliza a condição, exemplo:
IF (@B = ‘S’) AND
(EXISTS(SELECT)) AND
(EXISTS(SELECT)) AND
(EXISTS(SELECT)) AND
(@A = ‘S’)
BEGIN
END
———————————————–
De: Amorim, Fabiano
Enviada em: terça-feira, 27 de outubro de 2009 10:11
Para: Medina, Edvaldo
Assunto: RES: Cuidado com o IF EXISTS…
Cara, infelizmente ele vai avaliar todas as consultas, para depois pegar o resultado delas e fazer o IF. Por ex:
DECLARE @A VarChar(1)
SET @A = ‘X’
IF (@A = ‘X’)
AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = 1)
AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = 2)
AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = 3)
AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = 4)
AND EXISTS (SELECT 1 FROM CONVE002 WHERE ID_Cota = -1)
BEGIN
SELECT ‘Existe’
END
Ele vai executar todos os selects na CONVE002 guardar o resultado em memória e usar um operador de compute scalar para validar o IF.
Veja no plano de execução, que o operador de compute scalar é o último a ser executado… Não sei não mais acho que o ideal seria ter uma validação para cada consulta…