Sql While循环或动态执行

Sql While循环或动态执行,sql,sap-iq,Sql,Sap Iq,我有一张桌子: 查看包含393085432行的31_aug_服务器 我试图通过联接条件更新字段(联接条件是正确的)。但是查询无法执行,因为它超出了查询临时空间 然后我尝试使用while循环,它并没有中断,但已经运行了很多年了 CREATE VARIABLE @var_period_start datetime; CREATE VARIABLE @var_period_end datetime; CREATE VARIABLE @scan

我有一张桌子: 查看包含393085432行的31_aug_服务器

我试图通过联接条件更新字段(联接条件是正确的)。但是查询无法执行,因为它超出了查询临时空间

然后我尝试使用while循环,它并没有中断,但已经运行了很多年了

CREATE VARIABLE @var_period_start               datetime;
CREATE VARIABLE @var_period_end                 datetime;
CREATE VARIABLE @scanning_day                   datetime;

SET @var_period_start  = '2013-08-17';
SET @var_period_end    = '2013-08-31';
SET @scanning_day = @var_period_start;

while @scanning_day <= dateadd(dd,0,@var_period_end)
begin
    UPDATE VIEWING_17to31_aug_server
    SET A.calculated_scaling_weight = B.calculated_scaling_weight
    FROM VIEWING_17to31_aug_server AS A
    LEFT JOIN sk_prod.viq_viewing_data_scaling AS B
    ON A.ACCOUNT_NUMBER = B.ACCOUNT_NUMBER
    AND A.VIEWING_DAY = B.ADJUSTED_EVENT_START_DATE_VESPA
    AND A.VIEWING_DAY = @SCANNING_DAY
End
创建变量@var\u period\u start datetime;
创建变量@var\u period\u end datetime;
创建变量@scanning_day datetime;
设置@var_period_start='2013-08-17';
设定值@var_period_end='2013-08-31';
设置@scanning\u day=@var\u period\u start;

当@scanning_day时,我认为您需要在循环中增加@scanning_day,此时,
while
条件将永远不会满足,因为
@scanning_day
@var_period\u开始时保持不变。e、 g

SET @scanning_day = dateadd(dd, 1, @scanning_day);
因此,您的完整脚本将变成:

CREATE VARIABLE @var_period_start               datetime;
CREATE VARIABLE @var_period_end                 datetime;
CREATE VARIABLE @scanning_day                   datetime;

SET @var_period_start  = '2013-08-17';
SET @var_period_end    = '2013-08-31';
SET @scanning_day = @var_period_start;

while @scanning_day <= dateadd(dd,0,@var_period_end)
begin
    UPDATE VIEWING_17to31_aug_server
    SET A.calculated_scaling_weight = B.calculated_scaling_weight
    FROM VIEWING_17to31_aug_server AS A
    LEFT JOIN sk_prod.viq_viewing_data_scaling AS B
    ON A.ACCOUNT_NUMBER = B.ACCOUNT_NUMBER
    AND A.VIEWING_DAY = B.ADJUSTED_EVENT_START_DATE_VESPA
    AND A.VIEWING_DAY = @SCANNING_DAY;

    SET @scanning_day = dateadd(dd, 1, @scanning_day);
End
创建变量@var\u period\u start datetime;
创建变量@var\u period\u end datetime;
创建变量@scanning_day datetime;
设置@var_period_start='2013-08-17';
设定值@var_period_end='2013-08-31';
设置@scanning\u day=@var\u period\u start;

虽然@ ScNeangSay1不确定是否符合您的应用程序,但是如果您可以考虑每个更新原子(如如果while循环失败,您希望保持已完成的更新),那么您可以在每个循环循环之后尝试提交。谢谢你@garethD