Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come cortocircuitare la clausola SQL Where

SQL Server non esegue il cortocircuito (né dovrebbe).

Se ne hai bisogno, non provare qualcosa in alcune circostanze, devi forzarlo nel modo in cui scrivi la tua query.

Per questa query la soluzione più semplice sarebbe utilizzare un CASE espressione nel tuo WHERE clausola.

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)

Seconda mano, CASE e l'annidamento delle query sono gli unici due modi supportati che mi vengono in mente per forzare un ordine di valutazione per le condizioni dipendenti in SQL.