SQL ЕСЛИ СУЩЕСТВУЕТ поведение странное - PullRequest
0 голосов
/ 08 июня 2018

Я менял какую-то хранимую процедуру, и случилось нечто странное.

IF EXISTS (SELECT * FROM TABLE1
           WHERE varID = (CAST(@v_varID AS int) + 1))
    UPDATE TABLE2
    SET id = (CAST(@v_varID AS int) + 1) 
    WHERE category = @v_category 
ELSE
    UPDATE CATEGORY 
    SET id = (CAST(@v_varID AS int) + 1) 
    WHERE category = @v_category 

Это был мой код.Поскольку @v_varID имеет тип varchar, мне нужно было преобразовать его в int, чтобы увеличить id.Проблема заключалась в том, что когда @v_varID конвертируется, он попадает в IF EXISTS.Когда я просто обновляю его без EXISTS, он работает так, как я ожидал.

ERROR_LOG показывает другой неконвертируемый @v_varID в таблице не может конвертировать в int.Я передаю только '800' или какое-то целое число varchar-ed, поэтому оно должно работать, но почему-то оно не проходит IF EXISTS (оно обновляется, если я избавляюсь от IF EXISTS).Я просто использовал другой способ заставить его работать, но мне любопытно, почему.

Спасибо!

1 Ответ

0 голосов
/ 08 июня 2018

Ваши update s имеют условие category = @v_category.

Ваш подзапрос if exists () не имеет.

Я предполагаю, что varid является строкой.Сравнение с целым числом преобразует varid в целое число.

Кроме того, я предполагаю, что категория проверяется перед преобразованием.Другими словами, есть строка с неправильным значением v_varid (т.е. не может быть преобразована в целое число), и это строка, в которой категории не совпадают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...