--当两个或两以上的操作要么都执行,要么都执行时要用事务。 1. Sql写法(事物+游标) --开始事务 BEGINTRAN --不显示计数信息 SET NOCOUNT ON DECLARE@ProjNovarchar(50),@CusNovarchar(50) --声明游标 DECLARE CRMPSContact_cursor CURSORFOR SELECT ProjNo FROM CRMPSContact WHERE ProjNo>0 --打开游标 OPEN CRMPSContact_cursor --取第一行的值给专案变量: @ProjNo FETCHNEXTFROM CRMPSContact_cursor INTO@ProjNo --取得客户号 select@CusNo= CusNo from CRMPSProjectM where ProjNo =@ProjNo --得到CRMPSContact中某专案号对应的客户号 update CRMPSContact set CusNo =@CusNo where ProjNo =@ProjNo --执行错误回滚 if@@error!=0 begin rollbacktran return end --移动游标,其它所有行更新操作(当到结尾时退出) WHILE@@FETCH_STATUS=0 BEGIN --游标移到下一行 FETCHNEXTFROM CRMPSContact_cursor INTO@ProjNo --取得客户号 select@CusNo= CusNo from CRMPSProjectM where ProjNo =@ProjNo --得到CRMPSContact中某专案号对应的客户号 update CRMPSContact set CusNo =@CusNo where ProjNo =@ProjNo --执行错误回滚 if@@error!=0 begin rollbacktran return end END --提交所有变更 COMMITTRAN --关闭游标 CLOSE CRMPSContact_cursor --释放游标 DEALLOCATE CRMPSContact_cursor --恢复设置 SET NOCOUNT OFF GO