请看看我这样实现行锁对不对 这个原因是由于锁照成的,可以考虑将上面的事物分为两个单独的事物,分别是:1、获取B表的当前最大的号,将最大号更新加一,返回获取的最大号。2、根据返回的最大号更新A表的KEY! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to:wudan8057,非常感谢!你说的不错,是在PB中调用的,不过我不太理解,你说的“尽量改在存储过程中执行”是何意?是指生成最大号的东西放在存储过程中执行吗? --TRYSET XACT_ABORT ON;SET TRANSACTION LEVEL REPEATABLE READ;SELECT id INTO :ll_Id FROM B with (updlock) WHERE table_id=....;ll_NewId=ll_Id+1UPDATE B set id=:ll_NewId WHERE table_id=.... ;INSERT IN A VALUES(:ll_NewID, ...);COMMIT; TO:wgsasd311谢谢!但似乎你那句update...with (updlock)好像只能防止别人更新,但不能防止别人读啊。“SET XACT_ABORT ON”我没用过,似乎是让事务任一错误能立即自动回滚,但是有出错信息返回吗?因为我的事务是在PB程序中统一控制、提交或回滚的,如果没有出错代码和出错信息返回,我的PB程序中的事务仍然会继续运行而不会返回啊。 谢谢,我准备采用wudan8057试一下,然后观察一阵子看看效果如何。 Sql2000 行转列问题 行数太多问题 帮忙看下这个查询SQL怎么写 如何在select中exec存储过程? 动态行列转换可以不用存储过程么,直接写select语句。 存储过程问题 子查询 from 变量问题 数据库附加问题,请大家帮忙下!(在线等待) 一个日期显示的问题 小菜触发器求助 数据库同步遇到大问题了,急需救援! 复制数据库的问题,100求解! 如何从 sp_oaMethod 中得到调用方法的返回值?
SET XACT_ABORT ON;
SET TRANSACTION LEVEL REPEATABLE READ;
SELECT id INTO :ll_Id FROM B with (updlock)
WHERE table_id=....;
ll_NewId=ll_Id+1
UPDATE B set id=:ll_NewId WHERE table_id=.... ;
INSERT IN A VALUES(:ll_NewID, ...);
COMMIT;
“SET XACT_ABORT ON”我没用过,似乎是让事务任一错误能立即自动回滚,但是有出错信息返回吗?因为我的事务是在PB程序中统一控制、提交或回滚的,如果没有出错代码和出错信息返回,我的PB程序中的事务仍然会继续运行而不会返回啊。