Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como curto-circuitar a cláusula Where do SQL


O SQL Server não faz curto-circuito (nem deveria).

Se você precisar, não tente algo em algumas circunstâncias, você precisa forçar isso na maneira como escreve sua consulta.

Para esta consulta, a correção mais fácil seria usar um CASE expressão em seu WHERE cláusula.
declare @queryWord as nvarchar(20) = 'asdas'

SELECT  * FROM TABLE_1 
WHERE TABLE_1.INIT_DATE = (CASE WHEN ISDATE(@queryWord) = 1 
                                THEN CONVERT(Date, @queryWord)
                           ELSE NULL  END)

Secundário, CASE e o aninhamento de consultas são as duas únicas maneiras com suporte que consigo pensar para forçar uma ordem de avaliação para condições dependentes no SQL.