一说到SQL SERVER的游标,按照大多数的说法都是尽量不要使用游标、游标效率很低这些内容。我个人遇到的情况是在游标的运行过程中,如果是有比较大量的行需要滚动,就确实容易导致处理速度慢和出现阻塞的问题,在游标滚动过程中如果中间的指令出现错误导致游标不能正确的释放,那再次调用存储过程运行时就会看到提示说游标已经打开,请先关闭游标这样的错误提示。如下图
这是使用游标处理方式,如果中间的两行语句出现问题,就会导致上述的问题。当然这里我们先不考虑用事务的情况。
我现在遇到要逐行处理数据时,一般会用临时表的方式来代替使用游标,这样效率也高一点点。
同样的过程,该用临时表的写法,在我这个例子里面custcode是唯一的,实际情况下,我们可以用newid()来产生一个唯一的键值。另外一点,临时表的好处是连接断开是SQLSERVER会自动销毁它,这样也可以避免了上述游标的问题。