日期:2014-05-18  浏览次数:20571 次

黛玉党们出来啦,小生这里有个关于 MSSQL重复执行的问题要请教咯,妈咪妈咪哄~~~
好吧我承认我是标题党!
问题是这样的, 介于目前数据的特殊性,我需要 将一段SQL语句根据今天的天数执行N次。
比如 今天是10月5号 那么我需要做到的是

insert into atable 
select '2011-10-01',getdate() from table where date='2011-10-01'

insert into atable 
select '2011-10-02',getdate() from table where date='2011-10-02'

insert into atable 
select '2011-10-03',getdate() from table where date='2011-10-03'

insert into atable 
select '2011-10-04',getdate() from table where date='2011-10-04'

insert into atable 
select '2011-10-05',getdate() from table where date='2011-10-05'

也就是说如果今天是10月31号,那么我最后会把上面的语句执行31次 
本来重复执行直接用 go N 就可以圆满解决了,但是这个重复之中多了一个变量。我确实不知道怎么搞了。
请教啦

------解决方案--------------------
SQL code
insert into atable 
select date,getdate() from table where date between '2011-10-01' and '2011-10-31'

------解决方案--------------------
SQL code
insert into atable  
select DATEADD(DAY,number,'2011-10-05'),getdate() from Table1 ,master..spt_values
  where type='p' and number<DATEDIFF(DAY,'2011-10-01','2011-10-05')

------解决方案--------------------
SQL code
--功能:找出在2个日期之间的日期
--startdate:2009年9月15日  endDate:2009年10月3日 

declare @startdate datetime,@enddate datetime
set @startdate='2009-08-30'
set @enddate='2009-09-05'

select convert(varchar(10),dateadd(day,number,@startdate),120) 
from
    master..spt_values 
where 
    datediff(day,dateadd(day,number,@startdate), @enddate)>=0
    and number>0 
    and type='p'

/*----------
2009-08-31
2009-09-01
2009-09-02
2009-09-03
2009-09-04
2009-09-05

(6 行受影响)

/*

------解决方案--------------------
找它的开始时间和结束时间即可:

declare @startdate datetime,@enddate datetime
set @startdate='2010-10-01'
set @enddate='2010-10-05'

while @startdate<=@enddate
begin

insert into atable
select @startdate,@enddate from table where date=@startdate
set @startdate=dateadd(day,1,@startdate)
end