Boucle dans l'instruction SELECT dans ms sqlserver

Dupliquer possible:
SQL Server 2008 Générer une série de dates

Je dois boucler un startDate et un endDate

L'instruction SELECT doit produire le résultat en tant que ..

Production attendue :

------------ Date ------------ 09/01/2012 -> startDate 09/02/2012 09/03/2012 . . . . 09/30/2012 -> endDate 

j'ai essayé

 declare @startDate datetime , @endDate endDate set @startDate='09/01/2012' set @endDate='09/30/2012' while DATEDIFF(@startDate,@endDate)!=-1 begin select @startDate as Date set @startDate = DATEADD(day,2,@startDate) end 

Mais ça ne marche pas ..

il génère 30 sorties ..

je veux les dates dans une sortie unique comme dans la sortie attendue ..

où vais-je me tromper ici les gars?

Cela vous donnera un résultat pour chaque itération de boucle que vous select par itération.

Si vous souhaitez insert un seul set de résultats dans une table / variable temporaire par itération, select-le ou

 ;with T(day) as ( select @startDate as day union all select day + 1 from T where day < @endDate ) select day as [Date] from T 

Si vous voulez utiliser une boucle WHILE :

 declare @startDate datetime , @endDate datetime set @startDate='09/01/2012' set @endDate='09/30/2012' create table #temp (startDate datetime) while @startDate <= @endDate begin insert into #temp select @startDate as Date set @startDate = DATEADD(day,1,@startDate) end select * from #temp drop table #temp 

voir SQL Fiddle avec démo

Vous pouvez créer une table temporaire pour les valeurs et en sélectionner une à la fin, après l'itération.

 declare @temp table (TheDate date) declare @startDate datetime , @endDate datetime set @startDate='09/01/2012' set @endDate='09/30/2012' while DATEDIFF(day, @startDate, @endDate)!=-1 begin insert into @temp (thedate) values (@startDate) set @startDate = DATEADD(day,2,@startDate) end select * from @temp 

edit: Le cte Alex suggère est une manière beaucoup plus propre de le faire, et plus d'une façon sql de le faire, sans utiliser de loops ou de sliders.