У меня есть хранимая процедура, которая должна выполнять вставку, но сначала проверяет, используется ли уже первичный ключ, имея IF NOT EXISTS
перед вставкой.
IF NOT EXISTS(SELECT ...)
INSERT INTO ...
Поэтому я генерирую первичный ключ через код, потому что он используется как токен. Теперь я хочу поймать очень маловероятный случай, когда сгенерированный ключ уже существует в базе данных, посмотрев на возвращаемое значение метода SqlCommand.ExecuteNonQuery
, которое должно быть количеством затронутых строк.
Если вставка выполняется, метод возвращает «1» в качестве количества затронутых строк, но если вставка не выполняется из-за оператора IF
, хранимая процедура вообще не возвращает количество затронутых строк. Он просто говорит: «Команда (ы) выполнена успешно». в SQL Server Management Studio, поэтому метод ExecuteNonQuery
возвращает -1.
Почему это так, и я могу как-то изменить это поведение или это так работает?
INSERT
. Что вы ожидаете получить, если нетINSERT
даже не произойдет? Поскольку ничего не происходит - ничего не возвращается - мне это кажется довольно логичным .... нетINSERT
означает: никакие строки не затронуты этим несуществующимINSERT
.... - person marc_s   schedule 18.03.2014