在存储过程中有事务处理,如何判断是提交还是回滚呢?是不是判断@@error=0呢?
------------------------------------------
1.是不是没进行一次操作(比如 insert update ,delete),就要判断一次呀,如果操作失败就会滚,正常就继续执行后面的代码。最好一步操作没有问题,就提交。2.每一步判断时,判断什么呢,是不是 @@error 的只是不是为03.我的思路对吗?是不是理解有误呀?
------------------------------------------
1.是不是没进行一次操作(比如 insert update ,delete),就要判断一次呀,如果操作失败就会滚,正常就继续执行后面的代码。最好一步操作没有问题,就提交。2.每一步判断时,判断什么呢,是不是 @@error 的只是不是为03.我的思路对吗?是不是理解有误呀?
解决方案 »
- 请问QQ空间的“您上次离开后新增的访客数”在数据库上要怎么设计?
- sql server 2008服务器连接不上
- 很简单的问题
- 存儲過程pro_a返回一個表,在存儲過程pro_b中調用pro_a返回的表,不用臨時表還有別的方法嗎??
- 请大家进来帮忙看看~~~~
- 如何将数据库(所有表和视图)所有权限授予某个用户?要sql语句---在线等
- 一个简单触发器的编写,help,help
- 怎样用vb6.0编程实现在sql server中创建数据库和表?急。。。。
- SQL问题
- 打开数据库错误[Microsoft][ODBC SQL Server Driver][Named Pipes]连接占线。
- 有没办法把存储过程的执行结果插入到一个临时表那里
- 取连续记录
2、一般是判断@error1 <>0 则ROLLBACK TRANSACTION 事务名(回滚事务。 因为一般有多个,所以用 or )
BEGIN TRAN @@TRANCOUNT+1
COMMIT TRAN @@TRANCOUNT-1
ROLLBACK TRAN 使@@TRANCOUNT回归0
SAVE TRAN 不影响@@TRANCOUNT
举例
1) SELECT '事务处理前', @@TRANCOUNT --值为 0
BEGIN TRAN
SELECT '第一个事务', @@TRANCOUNT --值为 1
SELECT * FROM table1
BEGIN TRAN
SELECT '第二个事务', @@TRANCOUNT --值为 2
DELETE table1
COMMIT TRAN
SELECT '递交第二个事务', @@TRANCOUNT --值为 1
ROLLBACK TRAN
SELECT '回滚第一个事务', @@TRANCOUNT --值为 0
2) SELECT '事务处理前', @@TRANCOUNT --值为 0
BEGIN TRAN
SELECT '第一个事务', @@TRANCOUNT --值为 1
SELECT * FROM table1
SAVE TRAN t1
SELECT '保存第一个事务后', @@TRANCOUNT --值为 1
BEGIN TRAN
SELECT '第二个事务', @@TRANCOUNT --值为 2
DELETE table1
ROLLBACK TRAN t1
SELECT '回滚到保存点t1', @@TRANCOUNT --注意这里的值为 2
IF @@TRANCOUNT>0
ROLLBACK TRAN
SELECT '处理结束', @@TRANCOUNT --为 0
可以参考下这段代码