что не так с этой (простой) транзакцией sql? - PullRequest
0 голосов
/ 22 июня 2011

раздел "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 ]

4 голосов
/ 22 июня 2011

Вы изменяете меньше или больше чем одну строку, потому что у вас есть ноль или 2+ строки для userid=1. Что дает SELECT COUNT(*) FROM myTempTable WHERE userid=1?

Я только что проверил, где я обновляю одну строку точно и получаю "да, это работает"

0 голосов
/ 23 июня 2011

почему бы просто не включить чек прямо в ваше обновление:

declare @rowtoalter int =1

update myTempTable set name='newName' where userid=1
and (select count(*) from myTempTable where userid=1)=@rowtoalter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...