SI EXISTE en T-SQL


Si tenemos una instrucción SELECT dentro de una IF EXISTS, ¿la ejecución se detiene tan pronto como encuentra un registro en la tabla? Por ejemplo:

IF EXISTS(SELECT *  FROM  table1  WHERE Name='John' )

return 1

else

return 0

Si existe una fila en la tabla con el nombre = John, ¿detiene la ejecución y devuelve 1 o atraviesa toda la tabla buscando más coincidencias?

Author: Buggieboy, 2011-09-07

2 answers

Sí, detiene la ejecución, por lo que siempre se prefiere esto a COUNT > 0, que a menudo no lo hará.

Si observa el plan de ejecución, verá que el número real de filas que salen de table1 no será más de 1, independientemente del número de registros coincidentes.

Vea este artículo para una discusión sobre EXISTS vs COUNT

Si combina consultas EXISTS() AND EXISTS() sin embargo, no puede confiar en cortocircuitar. es decir, si la primera consulta es falsa y por lo tanto toda la expresión es false la segunda consulta todavía se ejecuta.

 48
Author: Martin Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:21

No hay necesidad de "else" en este caso:

IF EXISTS(SELECT *  FROM  table1  WHERE Name='John' ) return 1
return 0
 -3
Author: Miguel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-11 19:06:59