游标与事物与错误消息机制
2010-03-31 00:00:00 来源:WEB开发网我在实际的应用中发现一个问题,对于一个复杂的存储过程,把上面三种用法综合到一起,会提高不少的执行效率。一是为了找到错误点,回滚事务,把 try和 transaction组合到一起,如果大量数据要处理,可能会用到游标,有时候在想,事务当执行commit的时候才会永久地处理数据,是不是在用游标的时候也这样,把游标写到事务里,把所有的游标都执行完毕,再进行事务处理,如果异常则回滚。试了一下,果然快很多。而且在Transact-Sql里同一存储过程定义的变量,在整个运行周期都是有效的,这就很好将整个构想实现了。例如:
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION tran1
DECLARE @proarageid BIGINT,@procomid BIGINT,@proagentid BIGINT,@progropid BIGINT
---语句
DECLARE acursor CURSOR
FOR SELECT id,provicename,cityname FROM Ass_ArrearageTemporary
OPEN acursor
FETCH NEXT FROM acursor INTO @proarageid,@procomid,@proagentid WHILE @@FETCH_STATUS = 0
BEGIN
---语句
FETCH NEXT FROM acursor INTO @proarageid,@procomid,@proagentid
END
COMMIT TRANSACTION tran1
CLOSE acursor
DEALLOCATE acursor
END TRY
begin CATCH
IF @@TRANCOUNT > 0
BEGIN
CLOSE acursor
DEALLOCATE acursor
ROLLBACK TRANSACTION tran1
return
END
END CATCH
虽不是含量很高,但也是笔者的心血。
更多精彩
赞助商链接