Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 не выполняется запрос после оператора IF  [new]
Nelya_Kost
Member

Откуда:
Сообщений: 53
Добрый день! Я начинающий в работе с процедурами. Не могу разобраться почему не выполняется запрос после оператора IF.
if @@ROWCOUNT>0
 begin
 set @sql='update table
           set pole=1
           date_=GetDate()
           where pole=0
           '
 end
else
 begin  
  set @sql='insert into table
         (kod,pole,date_)
         select
         kod=1,
         pole=1
         date_=GetDate(),
         '       
 end      
exec (@sql)

Запрос упростила, т.к. сам он выполняется нормально. Пробовала выполнять по шагам процедуру, все выполняется без ошибок.
12 апр 13, 13:09    [14172335]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nelya_Kost
Не могу разобраться почему не выполняется запрос после оператора IF.

Наверное потому, что условие в IF не выполняется
12 апр 13, 13:10    [14172344]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
А где кусок кода ДО IF?
12 апр 13, 13:13    [14172359]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Nelya_Kost
Member

Откуда:
Сообщений: 53
set @sql_='select * from table where month(date_)=month(GetDate())'
exec (@sql_)

вот кусок до IF. Проверяла через переменную set @result=@@ROWCOUNT, условие выполняется
12 апр 13, 13:18    [14172407]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nelya_Kost
Проверяла через переменную set @result=@@ROWCOUNT, условие выполняется

Только вот в вашем IF нет никакой переменной @result
12 апр 13, 13:22    [14172436]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Nelya_Kost
Member

Откуда:
Сообщений: 53
вставила exec (@sql) после каждого set @sql, выполняется. Я думала, что достаточно одного в зависимости от выбранного условия!
12 апр 13, 13:22    [14172443]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Nelya_Kost
Member

Откуда:
Сообщений: 53
еще изменила на if @result!=0.
Спасибо за участие!
12 апр 13, 13:24    [14172463]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nelya_Kost
Я думала, что достаточно одного в зависимости от выбранного условия!

Да, достаточно
12 апр 13, 13:25    [14172474]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Nelya_Kost
set @sql_='select * from table where month(date_)=month(GetDate())'
exec (@sql_)


вот кусок до IF. Проверяла через переменную set @result=@@ROWCOUNT, условие выполняется
Очевидно, что между exec и IF есть ещё какой то оператор, например, "set @result=". Поэтому и не работает.
12 апр 13, 13:29    [14172503]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Nelya_Kost
Member

Откуда:
Сообщений: 53
убрала @result=@@ROWCOUNT и один раз после IF поставила exec. Значит собака была зарыта в переменной @result
12 апр 13, 13:29    [14172506]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nelya_Kost
Значит собака была зарыта в переменной @result

Собака зарыта в непонимании того, что возвращает @@ROWCOUNT
А @@ROWCOUNT возвращает количество записей обработанных последней выполненной командой.

Сообщение было отредактировано: 12 апр 13, 13:32
12 апр 13, 13:32    [14172533]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Nelya_Kost
убрала @result=@@ROWCOUNT и один раз после IF поставила exec. Значит собака была зарыта в переменной @result
То есть вы даже сейчас не поняли, в чём была проблема???
12 апр 13, 13:52    [14172694]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Nelya_Kost,

Если вам так нужна динамика, то запихайте уж тогда все в динамику, со всеми вашеми IF-ами и проверками. Какой смысл дробить это на кусочки то?
12 апр 13, 21:01    [14175224]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
ziktuw
Member

Откуда:
Сообщений: 3552
Неля,

А не забыли ли вы поставить в начале процедуры инструкцию "SET NOCOUNT ON" ?
13 апр 13, 18:30    [14176751]     Ответить | Цитировать Сообщить модератору
 Re: не выполняется запрос после оператора IF  [new]
Proavtor
Member

Откуда: Москва
Сообщений: 10
А не это ли нужно автору? )
if exists(select * from table where month(date_) = month(GetDate())
  update table set pole=1, date_=GetDate() where pole=0
else
  insert into table (kod,pole,date_)
  values(1, 1, getdate())
15 апр 13, 19:09    [14183803]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить