何时在SQL Server中使用游标和循环

时间:2015-01-13 09:01:26

标签: sql-server while-loop cursor

我们在Cursor和while循环之间选择哪些因素。我们何时应该使用游标,何时应该使用While循环?

1 个答案:

答案 0 :(得分:3)

游标是在数据库引擎内部构建的循环结构,具有各种功能。游标允许您获取一组数据,循环遍历每条记录,并根据需要修改值;然后,您可以轻松地将这些值分配给变量并对这些值执行处理。根据您请求的光标类型,您甚至可以获取之前提取的记录。

因为游标是数据库引擎中的实际对象,所以创建游标并销毁游标会产生一些开销。此外,大多数游标操作都发生在tempdb中,因此使用游标时使用频繁的tempdb会更加重载。

WHILE循环是一种您可能熟悉其他编程语言的编程结构。您可以在循环开始时定义条件,只要此条件保持为真,就会发生迭代。

WHILE循环和游标一样容易使用,但有时这些构造更难以阅读和/或理解,因为查询必须在必须获取单个下一行的基表上进行。在基础基表没有主键列(应该具有主键列)的情况下,这种类型的操作非常棘手。

尽管循环不提供游标附带的一些铃声和口哨声,例如能够轻松地向后移动"在结果集中。虽然,我从来没有遇到过用光标直接循环结果集的情况。

WHILE循环的一个优点是不必在内存中创建任何对象,以便于在游标中循环一组记录。

修改

如果要分析两者的功能,可以使用cursor和while循环编写语句,并分析使用SQL Server Profiler执行的读取次数。此工具将为我提供每个记录而不是每个单独记录的读取的组合汇总。拇指规则说,哪个更快,更好。