SQL Tips : ANSI_NULLS
La seguente query :
1 2 | SELECT DISTINCT Color from Production.Product WHERE Color IS NOT NULL ; |
come sappiamo tutti ritorna la lista dei Color dalla tabella Product non considerando i valori che sono a NULL.
ma se scriviamo la stessa query utilizzando l’operatore di confronto “diverso da” (<>) non otteniamo lo stesso risultato!
1 2 | SELECT DISTINCT Color from Production.Product WHERE Color <> NULL ; |
Questo perchè di default Sql Server ha impostato il flag ANSI_NULLS su ON e quindi non è possibile equiparare i valori a NULL e darà come risultato “unknown”.
Per poter far si che l’operatore “<>” venga considerato bisogna settare il flag ANSI_NULLS OFF in questo modo:
1 2 3 4 5 6 7 8 | USE AdventureWorks GO SET ANSI_NULLS OFF ; SELECT DISTINCT Color from Production.Product WHERE Color <> NULL ; |
riferimento : MCTS_70-433 Training Kit MS SQL Server 2008 Database Development
luglio 14, 2010
· admin · 2 Comments
Posted in: Coding, Programmazione, SQL
2 Responses
Rosalie Z. Barr - giugno 6, 2013
Se i dati includono valori Null, gli operatori logici e di confronto possono restituire potenzialmente un terzo valore, ovvero UNKNOWN, anziché TRUE o FALSE . Questa logica a tre valori, anche se necessaria, è causa di numerosi errori nelle applicazioni. Nelle tabelle riportate di seguito viene descritto il risultato ottenuto dal confronto tra valori Null.
Nelson Simpson - giugno 7, 2013
Se i dati includono valori Null, gli operatori logici e di confronto possono restituire potenzialmente un terzo valore, ovvero UNKNOWN, anziché TRUE o FALSE . Questa logica a tre valori, anche se necessaria, è causa di numerosi errori nelle applicazioni. Nelle tabelle riportate di seguito viene descritto il risultato ottenuto dal confronto tra valori Null.
Leave a Reply