将一个变量分配给另一个变量(SQL)

将一个变量分配给另一个变量(SQL),sql,tsql,variables,Sql,Tsql,Variables,我正在用一些计算方法编写一段简短的代码,我使用temp变量来执行它 当我刚刚将选择状态分配给@sum1时,它正在工作,但当我将其更改为@sum1+=SELECT…时,它返回空值(见附图) 我已经尝试了以下方法: 尝试进行一些强制转换(尽管@sum1和activityDur都定义为INT) 试图将SELECTstation分配到一个变量中,然后将该变量分配到一个新变量中 试图在web上发现类似问题(包括stackoverflow) thx SET@sum1=0 而@i 200) 开始 设置@i

我正在用一些计算方法编写一段简短的代码,我使用temp变量来执行它

当我刚刚将
选择
状态分配给
@sum1
时,它正在工作,但当我将其更改为
@sum1+=SELECT…
时,它返回
空值
(见附图)

我已经尝试了以下方法:

  • 尝试进行一些强制转换(尽管@sum1和activityDur都定义为INT)

  • 试图将
    SELECT
    station分配到一个变量中,然后将该变量分配到一个新变量中

  • 试图在web上发现类似问题(包括stackoverflow)

thx

SET@sum1=0
而@i 200)
开始
设置@index+=1
设置为@sum1=0
结束
插入tmp_finalCalc(RowNum、activityID、activityDur、actDay)
挑选
罗纳姆,
活动ID,
活动期间,
@sum1
来自tmp_activityCalculation,其中Rownum=@i
设置@i+=1
结束

SET@sum=0
而@i 200)
开始
设置@index+=1
设置为@sum1=0
结束
插入tmp_finalCalc(RowNum、activityID、activityDur、actDay)
挑选
罗纳姆,
活动ID,
活动期间,
@sum1
来自tmp_activityCalculation,其中Rownum=@i
设置@i+=1
结束
SET@sum=0
而@i 200)
开始
设置@index+=1
设置为@sum1=0
结束
插入tmp_finalCalc(RowNum、activityID、activityDur、actDay)
挑选
罗纳姆,
活动ID,
活动期间,
@sum1
来自tmp_activityCalculation,其中Rownum=@i
设置@i+=1
结束

如果activityDur字段为null,则它将返回null。因此,请使用isnull,如果其null add 0仍然不起作用,则它将再次返回null。。。(顺便说一句,activityDur的所有值都是数字,它们根本不是空值)我初始化了变量(我只是没有把它粘贴到这里来保存一些行,如果你错了,很抱歉…)是的,它有效!,非常感谢。我猜你不能在另一个变量中分配一个变量(比如@a=@a+@b)…如果activityDur字段为null,那么它将返回null。所以使用isnull,如果它的null add 0仍然不起作用-它将再次返回null。。。(顺便说一句,activityDur的所有值都是数字,它们根本不是空值)我初始化了变量(我只是没有把它粘贴到这里来保存一些行,如果你错了,很抱歉…)是的,它有效!,非常感谢。我猜你不能把一个变量赋给另一个变量(比如@a=@a+@b)。。。
SET @sum1=0
        WHILE @i <= 10
            BEGIN   
 //**** HERE IS THE PROBLEM
SET @sum1 += (SELECT activityDur FROM dbo.tmp_activityCalculation WHERE RowNum = @i)
//**** 
IF (@sum1 > 200)
                    BEGIN
                        SET @index += 1
                        SET @sum1 = 0
                    END
                INSERT INTO tmp_finalCalc (RowNum, activityID, activityDur,actDay)
                SELECT 
                    RowNum,
                    activityID,
                    activityDur,
                    @sum1
                FROM tmp_activityCalculation WHERE Rownum = @i      
                SET @i += 1
            END
SET @sum=0
    WHILE @i <= 10!
            BEGIN   
     //**** HERE IS THE PROBLEM
            SELECT @sum1=isnull(@sum1,0)+isnull(activityDur,'0') FROM dbo.tmp_activityCalculation WHERE RowNum = @i
    //**** 
                IF (@sum1 > 200)
                    BEGIN
                        SET @index += 1
                        SET @sum1 = 0
                    END
                INSERT INTO tmp_finalCalc (RowNum, activityID, activityDur,actDay)
                SELECT 
                    RowNum,
                    activityID,
                    activityDur,
                    @sum1
                FROM tmp_activityCalculation WHERE Rownum = @i      
                SET @i += 1
            END