Tsql 无法在Sql While循环中向变量添加值
在下面的while循环中,当从表中添加所选值时,变量@total的结果为NULL。如果不添加,结果将显示为表中的选定值,但仅显示最后一行的值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) +
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