добавление второго оператора if else к хранимой процедуре - PullRequest
0 голосов
/ 11 июля 2019

У меня есть хранимая процедура, как показано ниже, которая отлично работает.

declare db_cursor cursor for
select Atmosphere, Region, PreATR
from myTbl

open db_cursor
fetch next from db_cursor into @Atmosphere, @Region, @PreATR


while @@FETCH_STATUS = 0
begin

   if @PreATR = 1
      set @q = 'insert into tblA ... '       
   else
      set @q = 'insert into tblB ...
   end

   exec(@q)

   fetch next from db_cursor into @Atmosphere, @Region, @PreATR
end

close db_cursor
deallocate db_cursor

Однако теперь мне нужно ее настроить.Поэтому я хочу добавить еще одно утверждение if, как показано ниже.Когда я делаю это, строка ниже подсвечивается

close db_cursor

Неверный синтаксис рядом с 'close'.ожидание CONVERSATION

    open db_cursor
fetch next from db_cursor into @Atmosphere, @Region, @PreATR


while @@FETCH_STATUS = 0
begin

   if @Region = 55
      set @someVar = 1
   else
      set @someVar = 1
   end

   if @PreATR = 1
      set @q = 'insert into tblA ... '       
   else
      set @q = 'insert into tblB ...
   end

   exec(@q)

   fetch next from db_cursor into @Atmosphere, @Region, @PreATR
end

close db_cursor
deallocate db_cursor

почему добавление этого дополнительного оператора if вызывает такое поведение?

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Я уверен, что вы могли бы сделать это намного проще и быстрее без курсора, к сожалению, в вопросе недостаточно подробностей, чтобы написать пример, который поможет вам начать

вероятно, вам нужно что-то вроде этого

insert into tblA (your fields here)
select t.Atmosphere, t.Region, t.PreATR
from   myTbl t
where  t.PreATR = 1
and    more conditions here...

insert into tblB (your fields here)
select t.Atmosphere, t.Region, t.PreATR
from   myTbl t
where  t.PreATR <> 1
and    more conditions here...
1 голос
/ 11 июля 2019

Вы получаете сообщение об ошибке, потому что, если синтаксис else был неверным, а также отсутствовала одинарная кавычка во втором операторе вставки, попробуйте запрос, обновленный ниже, я удалил оператор end after else и добавил одиночную кавычку во второй оператор вставки -

open db_cursor
fetch next from db_cursor into @Atmosphere, @Region, @PreATR


while @@FETCH_STATUS = 0
begin

   if @Region = 55
      set @someVar = 1
   else
      set @someVar = 1


   if @PreATR = 1
      set @q = 'insert into tblA ... '       
   else
      set @q = 'insert into tblB ...'


   exec(@q)

   fetch next from db_cursor into @Atmosphere, @Region, @PreATR
end

close db_cursor
deallocate db_cursor

Примечание. При наличии нескольких операторов с блоком if и else вы должны использовать начало и конец, как показано ниже -

IF @Var = 1
BEGIN
    PRINT '1';
END
ELSE
BEGIN
    PRINT 'not 1';
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...