2011-06-22 45 views
0

「else」部分總是在sql中執行,有什麼想法爲什麼?這個(簡單)sql事務有什麼問題?

use myDB 
GO 


begin TRANSACTION 
go 
declare @rowtoalter int =1 

update myTempTable set name='newName' where userid=1 

if(@@[email protected]) 
begin 
    commit 
    print N'yes it works' 
end 
else 
begin 
    rollback 
    print N'nooo' 
end 

GO 
+0

是什麼'選擇COUNT(*)FROM myTempTable WHERE userid = 1's給? – gbn

+0

此更新明顯影響多於或少於1行 –

+0

打印'@@ ROWCOUNT'。我的猜測是它不等於1,這意味着更新不會影響任何行 –

回答

4

您正在改變少於或多於一排,因爲你必須爲零或2+行了userid=1SELECT COUNT(*) FROM myTempTable WHERE userid=1給了什麼?

我剛剛測試了,我更新一行正是和我「是它的工作原理」

0

爲什麼不納入檢查到您的權利更新:

declare @rowtoalter int =1 

update myTempTable set name='newName' where userid=1 
and (select count(*) from myTempTable where userid=1)[email protected]