我有一组存储过程(在MS SQL中)要运行-需要获取一个参数,一个日期,但它只记录了以这种方式运行它:
USE SALES
DECLARE @datestamp datestamp = '2022-11-01'
Exec Tool_UpdateCash @datestamp = @datestamp
Exec Tool_UpdateNumbers @datestamp = @datestamp
因此,如果我现在需要运行整个11月,我会在每次成功运行后手动增加日期。
(The原因是1号的更新中有一个bug,我已经部署了一个修复程序,但是销售的阅读需要更正/更新)
有没有更有效的方法可以在一个日期范围内执行此操作?我可以将**日期戳设置在@datestamp与dateadd(day,14,@datestamp)**之间吗
(for运行它14次?)或像这样:
日期戳(2022年11月1日,2022年11月2日,2022年11月3日,2022年11月4日,2022年11月5日,2022年11月6日,2022年11月7日,2022年11月8日,2022年11月9日,2022年11月10日,2022年11月11日)'2022年11月12日','2022年11月13日','2022年11月14日')
我更喜欢如果第一个建议的作品,但第二个也是可能的,那么我至少可以只是复制和粘贴它..其他更好的建议也是受欢迎的,并提前感谢任何帮助
我已经以记录在案的方式运行了它,我害怕以任何其他方式运行它,因为我不想导致问题,所以我试图确认其他方式来运行几天而不会捏造一些东西
编辑:pr的反馈和我自己的tweaks我降落在这个解决方案:
USE VARESALG
DECLARE @datestart date = '2022-11-01'
WHILE ( @datestart < dateadd(day, 14, @datestart ) )
BEGIN
Exec Tool_UpdateCash @datestamp = @datestamp
Exec Tool_UpdateNumbers @datestamp = @datestamp
SET @datestart = DATEADD(day,1,@datestart)
END
然而,这是完全错误的-因为它已经运行了5个多小时。它不应该需要5个小时。该死的
1条答案
按热度按时间6mzjoqzu1#
如果不能重写存储过程以接受日期,则只能在循环中为每个日期调用它们,使用CURSOR或WHILE循环。
假设@datestamp是DATE/DATETIME类型。