MS_SQL的存储过程中,如何判断update语句执行成功 ?
问题描述:
我需要写一个存储过程,根据前面的更新语句是否成功,决定后面的语句是否执行。看了很久旧帖子说要用@@ROWCOUNT判断,但是经过我的测试,发现这种判断并不支持并发的场景,很容易因为其他sql语句的执行导致判断结果发生变化。
跪求大佬们提供支持高并发的判断方法!
答
如图,叫做“妮瑪”的网友的写法给了我一丝希望。但是,如图中测试之后,return的内容输出的是0呀。请问是我哪里写的不对吗
我个人研究了很久,发现@@ROWCOUNT的判断方式其实是支持事务的。因为mssql的是以连接为单位维护@@ROWCOUNT的,类似于Web的后台,每个用户的进程都对应同一个Session。而每个连接中的执行语句都是存在串行的事务机制的。一个Web线程对应一个Sql连接,不存在所谓并发的情况。所以,可以直接用@@ROWCOUNT
答
DECLARE @sql_str nvarchar(100), @return int
SET @sql_str = 'update TEST set Field1 =2 where Field2 = 3';
EXEC @return = sp_executesql @sql_str;
PRINT @return;