Ho appena trovato un problema interessante con una procedura che sto scrivendo in SQL.Perché il confronto di una variabile data SQL con null si comporta in questo modo?
Nel mio proc ho 2 date, che sono parametri facoltativi predefiniti a NULL, voglio controllare se questi parametri non sono nulli e se non vengono eseguiti parte del mio proc, se sono nulli quindi la parte aggiuntiva del proc è ignorato
ho fatto un IF(@dateVariable <> NULL AND @DateVariable2 <> NULL)
dichiarazione abbastanza semplice, ma l'istruzione if non funziona mai, anche se le variabili non sono nulli, vorrei assumere SQL sta lottando per confrontare la data per un valore NULL che è strano dato datetime è annullabile.
Per aggirare questo ho appena fatto IF(DateVariable IS NOT NULL)
che funziona correttamente. Ho anche provato IF(ISNULL(@DateVariable,'') <> '')
che funziona correttamente
Quindi la mia domanda è: perché il primo IF non funziona, ma il secondo e il terzo IF fanno entrambi, poiché entrambi devono a un certo punto confrontare il contenuto della variabile in null?
Esempio:
----- ----- Fails
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (@Date <> NULL)
BEGIN
print('a')
END
----- ----- Opere
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (ISNULL(@Date,'') <> '')
BEGIN
print('a')
END
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (@Date IS NOT NULL)
BEGIN
print('a')
END
[Tre Logic Valued] (http://www.simple-talk.com/sql/learn-sql-server/sql-and-the-snare-of-three-valued -logic /) –
Pensa a 'NULL' come' Unknown Yet Value'. Cosa dovrebbe dare '@Date = Unknown Yet Value'? 'True'? 'False'? O "Non lo sappiamo"? –