NULL值上的数据库表更新错误

时间:2010-10-17 12:12:46

标签: c# database sql-server-2008 null

我有两张桌子。一个表实际上由日常事件填充,而另一个表只是另一个表的摘要。我有一个存储过程,它删除存储在每日表中的值。现在每次删除后,还应更新Summary表,以便现在更新SUM的值减去已删除的值。

我的问题是当每日表被清空时,然后自动对它进行求和会产生NULL值(因为在其中没有找到任何条目)。然后应用程序崩溃,因为我的摘要表不应包含NULL值。

如果可能,如果SUM结果为NULL,如何创建一个使值为0的过程?

示例查询:

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

从我上面给出的查询中,假设我的每日表中共有10个条目。 2是星期三的参赛作品,3是星期五,5是星期六参赛作品。所以基本上,我的汇总表将有三个条目 - 每个星期三,星期六和星期五的摘要。

当我要求我的程序删除所有星期三条目时,将剩下8个条目(没有星期三)。因此,我必须更新我的摘要条目,说明所有周三条目都已删除。但是,我不希望我的汇总表忘记他有一个星期三。所以相反,我希望他保留星期三条目,其总结束值为零(0)。

2 个答案:

答案 0 :(得分:1)

您可以使用COALESCENULL替换为值:

SELECT COALESCE( your_column, 0 )
FROM your_table

它接受一个参数列表,并返回第一个NOT NULL


编辑:根据您的示例,您可以执行以下操作:

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

答案 1 :(得分:1)

这是在SQL服务器上尝试ISNULL(SUM(列),0)。