【发布时间】:2015-09-04 05:35:43
【问题描述】:
我正在尝试在 SQL Server 中创建一个存储过程,它基本上将从给定开始日期到给定结束日期的月份递增,并将它们更新到预定义的表中。
问题: 有点像这样:
Exec MonthRunner @Start ='2014-01-01', @End = '2014-06-01'
应该给我一张这样的桌子:
Date
2014-01-01
2014-02-01
2015-03-01
2015-04-01
2015-05-01
2015-06-01
方法: 使用光标编程的循环。类似的东西:
Create Procedure MonthRunner(@Start date, @End date)
AS
DECLARE @Date date
DECLARE @getid CURSOR
SET @getid = CURSOR FOR
Select (@Start)
Set @getid
OPEN @getid
FETCH NEXT
FROM @getid into @Date
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Date = (Select Dateadd(Month, 1, @Date))
DECLARE @sqlrun varchar(max)
SET @sqlrun= 'Update myTable' + 'Set Date=' + @Date
EXEC @sqlrun
fetch next
from @getid into @Date
END
CLOSE @getid
DEALLOCATE @getid
到目前为止我的结果是:
Update myTable Set Date='2014-02-01'
但是没有循环,我也不知道如何使用变量@End 终止循环。
您的帮助将不胜感激! 提前致谢,
克莱门斯
【问题讨论】:
-
该死,我太专注于我的光标,以至于我忘记了如何循环。
-
用户 Alivia 提供的 CTE 解决方案即可。这可能是最好的一个。最重要的是,尽可能避免使用光标。
标签: sql-server tsql date stored-procedures cursor