2015-01-13 49 views

回答

3

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

由于游标是数据库引擎中的实际对象,因此在创建游标和销毁游标时会有一些额外开销。另外,大多数游标操作都发生在tempdb中,因此大量使用的tempdb会因使用游标而更加重载。

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

WHILE循环与游标一样易于使用,但有时这些结构难以阅读和/或理解,因为查询必须发生在基表上,必须获取单个下一个行。在底层基表没有主键列(它应该有)的情况下,这种操作非常棘手。

WHILE循环不提供游标附带的一些花里胡哨的功能,例如在结果集中轻松地“倒退”的功能。虽然,我从来没有遇到过除了通过带有游标的结果集进行直线循环之外的其他任何事情。

WHILE循环的一个优点是不必在内存中创建对象,以方便通过一组记录来循环使用游标所需的内容。

编辑

如果要分析两者的功能,你可以写用游标声明以及while循环和分析的使用SQL Server Profiler进行读取的数量。这个工具会给我一个组合的每个记录的读数,而不是每个记录。经验法则表示,无论哪个更快,更好。