刚刚接到一个面试电话,对头的先生问我懂不懂触发器和存储过程,当时是觉得有些好笑,毕竟“视图、触发和存储”是咱数据库工程师的吉祥三宝,怎么可能不认识?只是稍后他还问了下游标这东西,仔细想想我是不常使用Cursor,因为大表用上游标来遍历会降低查询效率,一般都是推荐面向集合的方式来解决问题而非遍历。不过既然有游标这东西,必定有它存在的价值,不妨就来扒皮下游标~
有玩过asp这种过时语言的朋友应该很能理解游标是啥东西,其实就是一个指针指着数据集里的某一行,然后像asp中用dataset.NEXT()或者dataset.PRE()的代码(希望没写错,我不写asp很久了)让这个指针指向下一行或者上一行的数据。于是这个游标呀,从头指到尾,就完成一次遍历。一般来说特大的表就别玩游标了,尽量用面向集合、面向整体的途径来解决问题,毕竟游标是“读一行、处理一行、指向下一行。。。”,而后者是“一口气把需要操作的行全读出来然后一口气处理完”。
不过有时候写存储过程,涉及的又是小规模的表,那么游标也是挺有用的,也不唠嗑太多,下面讲游标(Cursor)的用法。
先说说游标的定义,其实很简单,跟我们定义一个变量一样:
DECLARE @youbiao CURSOR