note - O Operador de cortocircuito en SQL Server
sql server 2019 rtm (3)
Quiero consultar cortocircuito de SQL Server O
Código:
DECLARE @tempTable table
(
id int
)
INSERT @tempTable(id) values(1)
DECLARE @id varchar(10)
SET @id = ''x''
SELECT * FROM @tempTable WHERE 1=1 OR id = @id --successfully
SELECT * FROM @tempTable WHERE @id = ''x'' OR id = @id --Exception not Convert ''x'' to int
¿Por qué? 1 = 1 y @ id = ''x'' es verdadero.
Operador SQL Server OR: si la función de cortocircuito?
GRACIAS
Dentro de SQL, no hay ningún requisito de que una cláusula OR se rompa antes. En otras palabras, depende del optimizador verificar ambas condiciones simultáneamente. No soy un experto en el optimizador de MSSQL, pero he visto casos en los que el optimizador no ha hecho un cortocircuito en una cláusula OR.
Es obvio que el servidor MS Sql es compatible con la teoría de cortocircuito, para mejorar el rendimiento al evitar la comprobación innecesaria,
Ejemplo de apoyo:
SELECT ''TEST''
WHERE 1 = ''A''
SELECT ''TEST''
WHERE 1 = 1 OR 1 = ''A''
Aquí, el primer ejemplo resultaría en un error ''La conversión falló al convertir el valor de varchar'' A ''al tipo de datos int.''
Mientras que la segunda se ejecuta fácilmente, la condición 1 = 1 se evalúa como VERDADERA y, por lo tanto, la segunda condición no se ejecuta en absoluto.
Además
SELECT ''TEST''
WHERE 1 = 0 OR 1 = ''A''
aquí la primera condición se evaluaría como falsa y, por lo tanto, el DBMS iría por la segunda condición y nuevamente obtendrá el error de conversión como en el ejemplo anterior.
NOTA: ESTOY ESCRIBIENDO LA CONDICIÓN ERRONEA PARA REALIZAR EL CLIMA, LA CONDICIÓN ES EJECUTADA O BREVE CIRCUITA SI LOS RESULTADOS DE LA CONSULTA EN EL ERROR SIGNIFICA LA CONDICIÓN EJECUTADA, CORTO CIRCUITO DE OTRA MANERA.
EXPLICACION SIMPLE
Considerar,
WHERE 1 = 1 OR 2 = 2
a medida que la primera condición se evalúa como VERDADERA , no tiene sentido evaluar la segunda condición porque su evaluación en cualquier valor no afectaría en absoluto al resultado, por lo que es una buena oportunidad para que el servidor Sql ahorre el tiempo de ejecución de consultas al omitir la comprobación o evaluación de condiciones innecesarias .
en caso de "O" si la primera condición se evalúa como VERDADERA, toda la cadena conectada por "O" se consideraría verdadera sin evaluar las demás.
condition1 OR condition2 OR ..... OR conditionN
si la condición 1 se evalúa como verdadera, descanse todas las condiciones hasta que se omita la condición N. En palabras generalizadas en la determinación de la primera VERDADERA , se omitirán todas las demás condiciones vinculadas por OR.
Considera la segunda condición.
WHERE 1 = 0 AND 1 = 1
como la primera condición se evalúa a FALSO, no tiene sentido evaluar la segunda condición porque su evaluación en cualquier valor no afectaría en absoluto al resultado, por lo que nuevamente es una buena oportunidad para que Sql Server ahorre el tiempo de ejecución de consultas al omitir la comprobación o evaluación de condiciones innecesarias .
en el caso de "Y" si la primera condición se evalúa como FALSA, toda la cadena conectada con la "Y" se consideraría como FALSA sin evaluar otras.
condition1 AND condition2 AND ..... conditionN
si la condición 1 se evalúa a FALSO , descanse todas las condiciones hasta que se omita la condición N. En palabras generalizadas al determinar el primer FALSO , todas las demás condiciones vinculadas por AND se omitirán.
POR LO TANTO, UN PROGRAMADOR INTELIGENTE DEBE SIEMPRE PROGRAMAR LA CADENA DE CONDICIONES DE TAL FORMA QUE, UNA CONDICIÓN MENOS DE CARGO O MÁS EXTENSIBLE SE EVALUE PRIMERO, O ESCRIBA LA CONDICIÓN DE LA MANERA MÁXIMA QUE SE PUEDE TENER EL MÁXIMO BENEFICIO DE LA INSTALACIÓN DE LA INSTITUCIÓN
Gracias y saludos,
Rk_Hirpara
Me tropecé con esta pregunta y ya había encontrado esta entrada de blog: http://rusanu.com/2009/09/13/on-sql-server-boolean-operator-short-circuit/
El servidor SQL es libre de optimizar una consulta en cualquier lugar que considere oportuno, por lo que en el ejemplo dado en la publicación del blog, no puede confiar en el cortocircuito.
Sin embargo, aparentemente se documenta un CASE para evaluar en el orden escrito; verifique los comentarios de esa publicación del blog.