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

Откуда:
Сообщений: 18
Добрый день!
Столкнулся со следующей проблемой:
Пытаюсь поставить условие IF на срабатывание UPDATE, но получается, что в первую очередь, пред запуском IF, проверяется синтаксис UPDATE и найдя несоответствие выдаёт ошибку. В своём предположении причины могу ошибаться.

Сам запрос:
IF 
(SELECT COUNT(*)
 FROM SysColumns sc INNER JOIN SysObjects so ON sc.id = so.id
 WHERE so.name = 'sc_anketa' AND sc.name = 'id_photo'
) > 0

UPDATE sc_photo
SET id_anketa = a.id 
FROM sc_anketa a INNER JOIN sc_photo p ON a.id_photo = p.id



Из запроса хотел получить, если столбец "sc_anketa.id_photo" отсутствует, то и UPDATE не срабатывает, но UPDATE всё равно выдаёт ошибку по отсутствующему столбцу. Такая проблема возникает именно с UPDATE, с другими элементами запроса IF работает как надо.
Обойти ошибку удалось поместив UPDATE в процедуру:
exec sp_Executesql N'UPDATE sc_photo
SET id_anketa = a.id
FROM sc_anketa a INNER JOIN sc_photo p ON a.id_photo = p.id'

Но всё же остался вопрос, в чём же дело, почему условие IF в данном случае не работает как надо? Подскажите пожалуйста!

Сообщение было отредактировано: 20 май 19, 17:26
20 май 19, 17:24    [21889063]     Ответить | Цитировать Сообщить модератору
 Re: Не работает IF в связке с UPDATE.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36696
IF 
(SELECT COUNT(*)
 FROM SysColumns sc INNER JOIN SysObjects so ON sc.id = so.id
 WHERE so.name = 'sc_anketa' AND sc.name = 'id_photo'
) > 0

exec ( 'UPDATE sc_photo
SET id_anketa = a.id 
FROM sc_anketa a INNER JOIN sc_photo p ON a.id_photo = p.id' )
20 май 19, 17:27    [21889065]     Ответить | Цитировать Сообщить модератору
 Re: Не работает IF в связке с UPDATE.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Kirill_l.s.,

https://www.sql.ru/forum/1312212/nalichie-polya-v-tablice
20 май 19, 17:27    [21889067]     Ответить | Цитировать Сообщить модератору
 Re: Не работает IF в связке с UPDATE.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36696
Kirill_l.s.
Но всё же остался вопрос, в чём же дело, почему условие IF в данном случае не работает как надо? Подскажите пожалуйста!
Потому что существование полей для существующих таблиц проверятся на этапе компиляции и до if дело даже не доходит.

Сообщение было отредактировано: 20 май 19, 17:28
20 май 19, 17:28    [21889069]     Ответить | Цитировать Сообщить модератору
 Re: Не работает IF в связке с UPDATE.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7403
Kirill_l.s.,

а зачем вы обновляете невалидную базу? Сначала приведите ее в порядок, добавьте колонки, а потом обновляйте. У вас запросы от одной базы, а таблицы - от другой.
20 май 19, 18:14    [21889108]     Ответить | Цитировать Сообщить модератору
 Re: Не работает IF в связке с UPDATE.  [new]
Kirill_l.s.
Member

Откуда:
Сообщений: 18
TaPaK, Благодарю!
20 май 19, 18:20    [21889113]     Ответить | Цитировать Сообщить модератору
 Re: Не работает IF в связке с UPDATE.  [new]
Kirill_l.s.
Member

Откуда:
Сообщений: 18
Гавриленко Сергей Алексеевич, Благодарю!
20 май 19, 18:20    [21889115]     Ответить | Цитировать Сообщить модератору
 Re: Не работает IF в связке с UPDATE.  [new]
Kirill_l.s.
Member

Откуда:
Сообщений: 18
Владислав Колосов, Задача добавить запрос в скрип, который будет работать в разных вариациях БД, так как этот скрипт используется на разных БД.
Ввиду новых подробностей буду предварительно укомплектовывать, потом Апдейдить ).
20 май 19, 18:26    [21889118]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить