2015-02-13 4 views
0

Я хочу создать цикл while в sql-сервере, который запускается с января 2014 года и выполняется до текущего месяца текущего года.Как создать цикл, который выполняется с первого месяца прошлого года до текущего месяца в SQL Server?

Это мой код прямо сейчас,

declare @month int 
set @month = 1 
while @month <= 12 
begin 
    truncate table #temp_Products 
    insert into #temp_Products 
    exec sp_Products_Count_Monthly @month, @year 
    insert into temp_Products_monthly 
    select @month as Created_Month, @year as Created_Year, * from #temp_Products 
    set @month = @month + 1 
end 

Я знаю, что петли не очень хорошая практика в SQL, но я не знаю, как выполнить хранимую процедуру для каждого месяца и сохранить набор результатов в Таблица.

Так что я хочу, чтобы получить результаты с января 2014 года до текущего месяца 2015

Как я могу это сделать?

ответ

1

Петли не являются лучшим решением, по крайней мере во всех случаях, но если вы можете разделить свою работу на более мелкие части (но не на по очереди), это может быть лучше, чем пытаться сделать действительно сложная вещь, чтобы справляться со всем сразу.

Для этого вы можете просто использовать простую переменную даты для цикла:

declare @tmpdate date, @year int, @month int 
set @tmpdate = '20140101' 
while @tmpdate < getdate() begin 
    set @month = month(@tmpdate) 
    set @year = year(@tmpdate) 

    truncate table #temp_Products 

    insert into #temp_Products 
    exec sp_Products_Count_Monthly @month, @year 

    insert into temp_Products_monthly 
    select @month as Created_Month, @year as Created_Year, * from #temp_Products 

    set @tmpdate = dateadd(month, 1, @tmpdate) 
end 

Если выполняется много, то вы, вероятно, следует попытаться переписать всю логику, так что вам не нужно будет вызывать отдельную процедуру для каждого месяца, но фактически извлекать все данные в одной партии.

+0

В строке exec sp_Products_Count_Monthly будет месяц, год, правильно? вместо @tmpdate – nrvbha

+0

Да, конечно, исправьте опечатку –

+0

Спасибо. Это сработало. – nrvbha

Смежные вопросы