游标的现实用例?

时间:2017-06-08 10:15:08

标签: sql sql-server tsql

我同时阅读了Microsoft文档和this article。然而,我似乎无法找到我只能使用游标而不是其他东西的地方,所以我很感激如果有人可以提供一些例子。

我也遇到过这个answer on stackoverflow而Jeffrey Hantin给了我更多怀疑。

2 个答案:

答案 0 :(得分:1)

想象一下必须获得像BCP这样的文字参数的命令。

尝试读取光盘上某处的100个XML文件,并在表格中显示其路径和文件名。

在这种情况下,您将动态创建语句并使用EXEC分别运行每个语句。

这可能是任何类型的循环,但CURSOR似乎是最接近的。

一般答案是:避免循环,大​​多数需求都可以在不使用循环的情况下解决。使用SQL,应该使用基于集合的方法而非过程方法。

答案 1 :(得分:1)

我发现我只使用游标进行管理任务。例如,我有一个运行在我的高活动大表中的脚本。这会在一夜之间重建索引,查询本身就是基于设置的。但是,我在同一个盒子上有多个具有相同结构的客户数据库。我会将维护脚本包装在一个游标中,该游标将拉出数据库名称并循环遍历它们。

我发现这减少了我必须做的工作量,因为光标会生成要处理的数据库列表。如果我添加客户/删除客户,维护不受影响。如果我运行一个新的盒子,我可以在设置过程中添加它,所以当我开始在新盒子上设置客户系统时,它会自动进行维护。

以下是使用相同概念备份所有数据库的人的示例。 https://www.mssqltips.com/sqlservertip/1070/simple-script-to-backup-all-sql-server-databases/

我提到的相同的好处是,它被定义一次,是否添加删除或移动数据库,它们已经自动在备份计划中