2010-10-17 7 views
0

J'ai deux tables. Une table est en réalité peuplée par des événements quotidiens tandis que l'autre est juste un résumé de l'autre table. J'ai une procédure stockée qui supprime les valeurs stockées dans la table quotidienne. Maintenant, après chaque suppression, la table récapitulative doit également être mise à jour de sorte que la somme soit maintenant mise à jour moins la valeur de celle supprimée.Erreur de mise à jour de la table de base de données sur la valeur NULL

Mon problème est que lorsque la table Daily a été vidée, la somme automatique de celle-ci donne une valeur NULL (puisqu'aucune entrée n'y est trouvée). L'application se bloque alors car ma table récapitulative ne doit pas contenir de valeurs NULL.

Si c'est possible, comment puis-je créer une procédure qui rendrait la valeur 0 si le SUM aboutissait à NULL?

QUERY EXEMPLE: De ma requête donnée ci-dessus

DELETE FROM Daily WHERE DailyID = @DailyID 

SELECT @TotalA = SUM(o.OutA), @TotalB = SUM(o.OutB), @TotalC = SUM(o.OutB) 
FROM Daily 
WHERE Day = @Day 

UPDATE Summary 
SET MyA = @TotalA, MyB = @TotalB, MyC = @TotalC 
WHERE SummaryID = @SummaryID 

, disons que j'ai un total de 10 entrées dans mon tableau quotidien. 2 sont les entrées du mercredi, 3 sont le vendredi et 5 sont les entrées du samedi. Donc, fondamentalement, mon tableau récapitulatif aura trois entrées - un résumé de chaque mercredi, samedi et vendredi.

Lorsque je demande à ma procédure de supprimer toutes les entrées du mercredi, il reste 8 entrées (pas de mercredi). Et donc je dois mettre à jour mon entrée récapitulative disant que toutes les entrées du mercredi ont été supprimées. Cependant, je ne veux pas que ma Table récapitulative oublie qu'il a eu un mercredi. Donc à la place, je veux qu'il conserve l'entrée du mercredi avec Total Summary Values ​​of Zeroes (0).

Répondre

1

Est-ce sur ISNULL try serveur SQL (SUM (colonne), 0).

+0

J'utiliserais 'COALESCE', comme il est standard et fonctionne pour Oracle, Sql-Server, MySQL, ... –

+0

Exactement ce dont j'avais besoin! Merci beaucoup! – Smiley

+0

btw, oui. c'est dans SQL Server 2008 :) – Smiley

1

Vous pouvez utiliser COALESCE pour remplacer NULL par une valeur:

SELECT COALESCE(your_column, 0) 
FROM your_table 

Il faut une liste d'arguments et renvoie le premier qui est NOT NULL.


EDIT: Avec votre exemple, vous pouvez faire quelque chose comme ça:

UPDATE Summary 
SET MyA = Coalesce(@TotalA, 0), 
    MyB = Coalesce(@TotalB, 0), 
    MyC = Coalesce(@TotalC, 0) 
WHERE SummaryID = @SummaryID 
+0

pouvez-vous me donner un échantillon? J'ai mis à jour ma question. veuillez le voir s'il vous plaît? Merci beaucoup! – Smiley

+0

@Kim: Mise à jour ma réponse. –

+0

Merci! cela fonctionne aussi :) – Smiley

Questions connexes