Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 无法在Sql While循环中向变量添加值_Tsql - Fatal编程技术网

Tsql 无法在Sql While循环中向变量添加值

Tsql 无法在Sql While循环中向变量添加值,tsql,Tsql,在下面的while循环中,当从表中添加所选值时,变量@total的结果为NULL。如果不添加,结果将显示为表中的选定值,但仅显示最后一行的值 SET @coundDate = '1/1/2012'; WHILE ( Datepart(dd, @countDate) < Datepart(dd, @endDate) ) BEGIN SET @total = @total + (SELECT Cast([7am] AS INT) +

在下面的while循环中,当从表中添加所选值时,变量@total的结果为NULL。如果不添加,结果将显示为表中的选定值,但仅显示最后一行的值

SET @coundDate = '1/1/2012';

WHILE ( Datepart(dd, @countDate) < Datepart(dd, @endDate) )
  BEGIN
      SET @total = @total + (SELECT Cast([7am] AS INT) + 
                                    Cast([8am]AS INT) AS TotalHitCount
                             FROM   Sale
                             WHERE  TransactionDate = @countDate);
      SET @countDate = Dateadd(d, 1, @countDate);
  END;

SELECT @total 

我现在很困惑。那是什么错误?

您必须使用默认值(如0)预先初始化变量:

正如Martin指出的,您可以将整个查询编写为一个简单的求和:


虽然我会问为什么7am和8am还不是整数。

为什么要在循环中执行此操作。不会为您求和吗?在这种情况下如何“分组依据”?根据您显示的代码,您不需要分组依据。只是一个只选择感兴趣的行的地方。@NayLinAung-您没有在显示的代码中初始化@total,尽管您显示的代码显然不是您的真实代码code@Damien_The_Unbeliever-如果你帮不上忙,请不要做无用的假设。这是我的BIT项目业务活动监控系统中的真实代码。如何显示每一段代码?我只发布了发生错误的部分代码。无用的假设?您的第一行指定给一个名为@coundDate的变量,而不是@countDate。因此,这不是真正的代码。我们所能做的就是你所做的事情。@Damien_不信者-这是我唯一的打字错误。对不起。我认为这与错误没有太大关系。如果我的评论侮辱了你,我真的很抱歉。我发誓这是我真正的代码,我来这里是为了找出答案,不是为了争论无关的因素。可能更安全的做法是将SUMISNULLCast[7am]作为INT,0+ISNULLCast[8am]作为INT,0作为Total。他们获得原始行为的原因之一是,如果其中一个值为NULL,则会丢失非NULL值。
SELECT SUM(Cast([7am] AS INT) + Cast([8am]AS INT)) AS Total
FROM   Sale
WHERE  TransactionDate between '20120101' and @endDate