刚刚看了@@curosr_rows这个全局变量,发现这个变量挺有意思。要懂得这个变量的意义,基本上牵扯到cursor一些比较容易忽视的内容。
@@cursor_rows是用来记录当前游标的数量,也就从基础表中加载到游标中的rows
它的值有四种:
1. -1 动态游标,也就是无法确定个数的游标。为什么呢?
因为这个时候的游标,只能使用 fetch next,所以并没有去统计符合查询条件的记录数。
2. m 加载基础表rows的个数,m为大于0的数。如果要统计这个数字,必须加上 scroll和insensitive关键字。insensitive是需要将数据从基础表转存到tempdb数据库的,二scroll因为需要定位,也对需要加载的数据进行了统计。
3. -m 对于 这个,需要了解游标的读取方式。如果遇到大数据量,这个数据量已经超过 sp_configure cursor threshold 的阈值。那么数据库引擎会有一个线程异步的从基础表读取数据至游标。这种情况下@@cursor_rows的值就代表了当前游标中已读取的记录数。注意:做例子的时候因为cursor threshold 选项设置为-1 ,即同步生成,所以有可能出现-1 的值,应为第一种情况。
4 0 没有活动的游标。
时间: 2024-10-05 23:47:53