Sql While循环或动态执行
我有一张桌子: 查看包含393085432行的31_aug_服务器 我试图通过联接条件更新字段(联接条件是正确的)。但是查询无法执行,因为它超出了查询临时空间 然后我尝试使用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
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