>ho bisogno di fare un controllo un pò particolare su una tabella.Mi
>spiego meglio: ho una Store Procedure che mi restituisce il massimo
>valore presente in una colonna di una tabella.Il problema è che
>quando vado a richiamare la funzione e nella tabella non c'è
>nessun valore mi viene segnalato un errore.
Ciao melmar20,
Puoi utilizzare le funzioni CASE, ISNULL() o COALESCE() per fare restituire un valore diverso da NULL:
USE tempdb;
CREATE TABLE dbo.Students(
StudentID int NOT NULL IDENTITY PRIMARY KEY,
FirstName varchar(10) NOT NULL,
LastName varchar(10) NOT NULL
);
SELECT
MAX(StudentID) AS [Max]
, ISNULL(MAX(StudentID), 0) AS Max_ISNULL
, COALESCE(MAX(StudentID), 0) AS Max_COALESCE
, CASE
WHEN MAX(StudentID) IS NULL THEN 0
ELSE MAX(StudentID)
END AS Max_CASE
FROM dbo.Students;
/* Output:
Max Max_ISNULL Max_COALESCE Max_CASE
----------- ----------- ------------ -----------
NULL 0 0 0
(1 row(s) affected)
*/
INSERT dbo.Students VALUES('Lorenzo', 'Benaglia');
SELECT
MAX(StudentID) AS [Max]
, ISNULL(MAX(StudentID), 0) AS Max_ISNULL
, COALESCE(MAX(StudentID), 0) AS Max_COALESCE
, CASE
WHEN MAX(StudentID) IS NULL THEN 0
ELSE MAX(StudentID)
END AS Max_CASE
FROM dbo.Students;
/* Output:
Max Max_ISNULL Max_COALESCE Max_CASE
----------- ----------- ------------ -----------
1 1 1 1
(1 row(s) affected)
*/
DROP TABLE dbo.Students;
Per capire bene la differenza tra le 3 funzioni, leggi molto attentamente questo articolo di Aaron:
http://databases.aspfaq.com/database/coalesce-vs-isnull-sql.html
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org