Principale utente con più risposte
Problema Query SQL SERVER 2008

Domanda
-
Salve a tutti,
Quando effettuo la seguente query sql:
select ISNULL(nome_citta,' pippo ') as nome_citta from tbl_citta where id_citta='1'
Visto che non esiste una tupla con id_citta = 1, la mia query dovrebbe restituire pippo, il risultato invece è solo il nome della colonna.
Cosa sto sbagliando?
Grazie a tutti!
Risposte
-
Invece c'è una differenza! :)
il server in quel caso non trova nessuna tupla, quindi non può esaminare il contenuto del campo [nome_citta] e gestirne il valore NULL, quindi è il risultato ad essere NULL e non il campo.
- Proposto come risposta Fabrizio GiammariniMVP, Moderator venerdì 8 marzo 2013 11:24
- Contrassegnato come risposta Fabrizio GiammariniMVP, Moderator martedì 12 marzo 2013 13:02
-
Aggiungo un esempio rafforzativo di quanto correttamente dice Luca.
Siccome ISNULL non viene eseguita eccoti l'esempio per una possibile alternativa:
USE tempdb; GO CREATE TABLE #tbl_citta ( id_citta int NOT NULL PRIMARY KEY CLUSTERED , nome_citta varchar(50) NOT NULL ); GO INSERT INTO #tbl_citta ( id_citta, nome_citta ) VALUES (2, 'Milano'); INSERT INTO #tbl_citta ( id_citta, nome_citta ) VALUES (3, 'Parma'); -- non torna righe, isnull non viene nemmeno valutato SELECT ISNULL(nome_citta, 'pippo') AS Nome FROM #tbl_citta WHERE id_citta = 1; GO -- possibile alternativa a DB DECLARE @Nome varchar(50) = NULL; SELECT @Nome = ISNULL(nome_citta, 'pippo') FROM #tbl_citta WHERE id_citta = 1; SELECT @Nome AS Nome; DROP TABLE #tbl_citta; GO
Per questo tipo di controlli forse, puoi pensare, sempre che esista, di demandare all'applicazione la gestione del resultset vuoto (o anche del null), senza preoccuparti di tornare un null all'applicazione stessa. Eviteresti di fatto di far gestire a database una logica che magari serve solo all'applicazione.
ciao
Alessandro Alpi SQL Server MVP
- Proposto come risposta Fabrizio GiammariniMVP, Moderator venerdì 8 marzo 2013 11:24
- Contrassegnato come risposta Fabrizio GiammariniMVP, Moderator martedì 12 marzo 2013 13:02
Tutte le risposte
-
Invece c'è una differenza! :)
il server in quel caso non trova nessuna tupla, quindi non può esaminare il contenuto del campo [nome_citta] e gestirne il valore NULL, quindi è il risultato ad essere NULL e non il campo.
- Proposto come risposta Fabrizio GiammariniMVP, Moderator venerdì 8 marzo 2013 11:24
- Contrassegnato come risposta Fabrizio GiammariniMVP, Moderator martedì 12 marzo 2013 13:02
-
Aggiungo un esempio rafforzativo di quanto correttamente dice Luca.
Siccome ISNULL non viene eseguita eccoti l'esempio per una possibile alternativa:
USE tempdb; GO CREATE TABLE #tbl_citta ( id_citta int NOT NULL PRIMARY KEY CLUSTERED , nome_citta varchar(50) NOT NULL ); GO INSERT INTO #tbl_citta ( id_citta, nome_citta ) VALUES (2, 'Milano'); INSERT INTO #tbl_citta ( id_citta, nome_citta ) VALUES (3, 'Parma'); -- non torna righe, isnull non viene nemmeno valutato SELECT ISNULL(nome_citta, 'pippo') AS Nome FROM #tbl_citta WHERE id_citta = 1; GO -- possibile alternativa a DB DECLARE @Nome varchar(50) = NULL; SELECT @Nome = ISNULL(nome_citta, 'pippo') FROM #tbl_citta WHERE id_citta = 1; SELECT @Nome AS Nome; DROP TABLE #tbl_citta; GO
Per questo tipo di controlli forse, puoi pensare, sempre che esista, di demandare all'applicazione la gestione del resultset vuoto (o anche del null), senza preoccuparti di tornare un null all'applicazione stessa. Eviteresti di fatto di far gestire a database una logica che magari serve solo all'applicazione.
ciao
Alessandro Alpi SQL Server MVP
- Proposto come risposta Fabrizio GiammariniMVP, Moderator venerdì 8 marzo 2013 11:24
- Contrassegnato come risposta Fabrizio GiammariniMVP, Moderator martedì 12 marzo 2013 13:02
-
-