2016-11-22 7 views
1

Я пытаюсь использовать цикл while для заполнения таблицы в SQL Server. Данные должны быть с 5-часовым шагом с 8:00 до 19:00 с понедельника по пятницу.Пока цикл для заполнения таблицы

Ниже приведен код, который у меня есть на месте, когда я пытаюсь передать переменную @Beg к @Temp я получаю сообщение об ошибке:

Msg 102, Level 15, State 1, Line 85
Incorrect syntax near '@Temp'.

Msg 102, Level 15, State 1, Line 90
Incorrect syntax near '@Beg'.

Мой код:

Create Table TIMESLOT 
(
    TIMESLOTID int not null identity(1,1), 
    Beg_Time datetime not null, 
    End_Time datetime not null, 
    TimeDayOFWeek varChar(25) not null 
); 

DECLARE @Beg as Time; 
DECLARE @Temp as Time; 
DECLARE @End as Time; 
DECLARE @Day as dayofweek; 

set @Beg = '08:00 AM'; 
Set @End = '07:00 PM'; 
set @Day = 'Monday'; 

While (@Day != 'Saturday') 
Begin 
    While (@Beg <= @End) 
    Begin 
     @Temp = @Beg; 

     DateAdd(minute,5,@Temp) 

     Insert into TIMESLOT (Beg_Time, End_Time, TimeDay0fWeek) 
     Values (@Beg, @Temp, @Day) 

     if (@Beg <= @End) 
      @Beg = @Temp 
     Else 
      @Beg = '08:00 AM' 
      @Day = Datadd(day, 1, @Day) 
     End 
    End 
End 
+0

'set @Temp = @Beg;' –

+0

Это код SQL Server/tsql? (Далеко от ANSI SQL в любом случае ...) – jarlh

ответ

0

Это код, который, наконец, устранил проблему, Wheels73 был прав, мой синтаксис был неправильным. Но у меня также был оператор if, а переменная @beg сброшена в неправильную область.

While (@Day != 'Saturday') -- first end 
Begin 
    While (@Beg < @End) 
    Begin--Second 
     Set @Temp = @Beg 
     Set @Temp = DateAdd(MINUTE,5,@Temp) 
     Insert into TIMESLOT (Beg_Time, End_Time, TimeDayOFWeek) 
     Values (@Beg, @Temp, @Day) 
     Set @Beg = @Temp 
    End--Second 
    Set @Beg = '08:00 AM' 
    if(@Day = 'Monday') 
     Begin 
      Set @Day = 'Tuesday' 
     End 
    Else if(@Day = 'Tuesday') 
     Begin 
      Set @Day = 'Wednesday' 
     End 
    Else if (@Day = 'Wednesday') 
     Begin 
      Set @Day = 'Thursday' 
     End 
    Else if (@Day = 'Thursday') 
     Begin 
      Set @Day = 'Friday' 
     End 
    Else 
     Begin 
      Set @Day = 'Saturday' 
     End 
End--firstenter code here 
+0

Меньше всего вы можете сделать это, это ответ «Колеса», чтобы подтвердить его усилия в попытке решить вашу проблему. –

1

попробовать ниже. Ваш синтаксис был не совсем корректным

Create Table TIMESLOT 
(
    TIMESLOTID int not null identity(1,1), 
    Beg_Time datetime not null, 
    End_Time datetime not null, 
    TimeDayOFWeek varChar(25) not null 
); 

DECLARE @Beg as Time; 
DECLARE @Temp as Time; 
DECLARE @End as Time; 
DECLARE @Day as dayofweek; 

set @Beg = '08:00 AM'; 
Set @End = '07:00 PM'; 
set @Day = 'Monday'; 

While (@Day != 'Saturday') 
Begin 
    While (@Beg <= @End) 
    Begin 
     Set @Temp = @Beg; 
     Set @Temp = DateAdd(MINUTE,5,@Temp) 
     Insert into TIMESLOT (Beg_Time, End_Time, TimeDayOFWeek) 
     Values (@Beg, @Temp, @Day) 
     If (@Beg <= @End) 
     Begin 
      Set @Beg = @Temp 
     End 
     Else 
     Begin 
      Set @Beg = '08:00 AM' 
      Set @Day = DateAdd(day,1, @Day) 
     End 
    End 
End 
+0

Это работало частично, мне пришлось перемещать оператор if, а остальную часть переменной @beg - за пределы внутреннего While; – Orgra

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