这个(简单的)sql Transaction有什么问题?

时间:2011-06-22 08:29:35

标签: sql sql-server transactions

“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 个答案:

答案 0 :(得分:4)

您正在更改少于或多于一行,因为userid=1有0行或2行。 SELECT COUNT(*) FROM myTempTable WHERE userid=1给出了什么?

我刚测试了哪一行完全,我得到“是的,它可以正常工作”

答案 1 :(得分:0)

为什么不直接将支票纳入您的更新:

declare @rowtoalter int =1

update myTempTable set name='newName' where userid=1
and (select count(*) from myTempTable where userid=1)=@rowtoalter