раздел "else" всегда выполняется в SQL, есть идеи, почему?
use myDB GO begin TRANSACTION go declare @rowtoalter int =1 update myTempTable set name='newName' where userid=1 if(@@ROWCOUNT=@rowtoalter) begin commit print N'yes it works' end else begin rollback print N'nooo' end GO
Вы изменяете меньше или больше чем одну строку, потому что у вас есть ноль или 2+ строки для userid=1. Что дает SELECT COUNT(*) FROM myTempTable WHERE userid=1?
userid=1
SELECT COUNT(*) FROM myTempTable WHERE userid=1
Я только что проверил, где я обновляю одну строку точно и получаю "да, это работает"
почему бы просто не включить чек прямо в ваше обновление:
declare @rowtoalter int =1 update myTempTable set name='newName' where userid=1 and (select count(*) from myTempTable where userid=1)=@rowtoalter