Någon som vet något bra sätt att få o (noll) i ställer för Null när man använder sum(). när man använder count() så blir det 0 när setter är tomt. Men om det inte finns något att räkna när man använder sum() så returneras Null. Vill inte göra massa Null kontroller i koden utan lösa det i en SP. Någon som har en bra lösning? För det första, att kontrollera om ett värde är NULL ska _inte_ göras så här: Varför använder du inte ISNULL(@varde, 0) Är det oerhört innefektivt att skriva: Aha, IsNull var ju en bra funktion. Tänkte väl att det fanns någon sådan funktion... Men funktionen som jag gjort fungerar ypperligt också dock slöare etc etc Ja, din funktion kommer att vara mycket långsammare därför att den måste anropas en gång för varje rad i resultatet, vilket tar lång tid med UDFer medan ISNULL och COALESCE är optimerade för det. SELECT SUM(COALESCE(tOrderRow.numberOf, 0))0 istället för Null med sum() [LÖST]
/Rickard
Löste det genom följande funktion:
<code>
CREATE FUNCTION dbo.NullToNill(@val int)
RETURNS int
AS
BEGIN
DECLARE @Value int
IF(@val = NULL)
Begin
Select @Value=0
End
Else
Select @Value=@Val
return(@Value)
end
</code>
Så att: dbo.NullToNill(sum(tOrderRow.numberOf))
Andra förslag är välkomna!Sv: 0 istället för Null med sum() [LÖST]
IF(@val = NULL)
utan så här:
IF @val IS NULL
Sen så kan väl inte ditt exempel fungera som du tänkt?
dbo.NullToNill(sum(tOrderRow.numberOf)) borde väl vara SUM(dbo.NullToNill(tOrderRow.numberOf)), eller?
Slutligen så finns det redan två olika funktioner för att byta ut ett värde som är NULL mot något annat, och du bör förstås använda en av dessa istället för din egen:
SELECT SUM(COALESCE(tOrderRow.numberOf, 0))
SELECT SUM(ISNULL(tOrderRow.numberOf, 0))
Läs mer i Books Online om dessa om du vill veta mer.Sv: 0 istället för Null med sum() [LÖST]
Om @varde är NULL kommer 0 att användas i exemplet ovan.
/EmmaSv: 0 istället för Null med sum() [LÖST]
SELECT SUM(COALESCE(tOrderRow.numberOf, 0))
SELECT SUM(ISNULL(tOrderRow.numberOf, 0))
Eftersom funktionen måste köras för varje post. Jämfört mot:
SELECT COALESCE(SUM(tOrderRow.numberOf), 0)
SELECT ISNULL(SUM(tOrderRow.numberOf), 0)
Där funktionen anropas en gång med resultatet. Eller optimerar SQL motorn om detta?Sv: 0 istället för Null med sum() [LÖST]
Tackar!Sv: 0 istället för Null med sum() [LÖST]
Sv: 0 istället för Null med sum() [LÖST]
är inte samma sak som
SELECT COALESCE(SUM(tOrderRow.numberOf), 0)
Så svaret är nej, SQL motorn 'optimerar' inte det, eftersom man då hade kunnat få fel resultat. :)