请看看我这样实现行锁对不对 这个原因是由于锁照成的,可以考虑将上面的事物分为两个单独的事物,分别是: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试一下,然后观察一阵子看看效果如何。 问个3表联合查询的语句 能不能用一条sql语句满足我的要求! 如何提高查询数据的效率 sql中如何截取小数点后的字段,并且让它四舍五入? 如何将记录按操作时间的小时group by 如何建一个带参数的视图,在线等待! 存储过程修改不了,检查语法正确-[SQL-DMO]必须在Text属性的"Create..."语句中指定的名称必须与Name属性匹配 如何添加ODBC源中的用户DSN 如何生成SQL Server数据库安装包 如何扩展全文检索对Image里的文件格式的支援 复制数据库的问题,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程序中的事务仍然会继续运行而不会返回啊。