我有一个接收特定日期作为参数的过程,即Exec ProcDB '20150428'
经常我需要在很多日期运行这个过程,通常我重新输入 Exec ProcDB 'date1' GO Exec ProcDB 'date2'go .....我认为它不聪明,所以
我可以使用Select Distinct [dates] From Table1 Order By [dates]获取有效的日期列表。
所以我想创建一个接收Start_Dt和End_Dt的新过程, 它会循环我选择的不同返回的所有日期,其中包括 Start_Dt 和 End_Dt。
ie something like:
Create ProcDBlist Start_Dt as date, End_Dt as date
For each date in: Select Distinct [date] from [table1] where [date] >= @Start_Dt and [date] <= @End_dt
Do: Exec ProcDB 'Date n'
End
更新:
最终解决方案:
Create procedure [dbo].[ProcessDBRange] (@Start_dt as varchar(15) =null, @End_dt as varchar(15) =null)
As
Begin
DECLARE @date as varchar(15)
DECLARE Cursor_ProcessDB CURSOR FOR
Select Distinct Convert(varchar(15), [date], 112) as [date]
From [Prices]
Where [date] >= @Start_dt and [date] <= @End_dt
Order By [date]
OPEN Cursor_ProcessDB
FETCH next FROM Cursor_ProcessDB
INTO @date
WHILE @@FETCH_STATUS = 0
BEGIN
Exec ProcessDB @date
FETCH next FROM Cursor_ProcessDB
INTO @date
END
CLOSE Cursor_ProcessDB
DEALLOCATE Cursor_ProcessDB
End