2012-03-02 71 views
-1

我是TSQL/SQL的新手,我想在TSQL/SQL中学习'While循环'。有什么好的网站/书籍可以帮助提高我对“循环”的认识。您的意见非常感谢。TSQL/SQL - 循环

+10

避免循环结构在SQL和开始思考的一组操作。循环结构在SQL中是_expensive_。 – Oded 2012-03-02 16:46:56

+0

感谢Oded,会保持这种想法。关于学习材料的任何想法。 – Warne 2012-03-02 16:51:49

+0

阅读SSMS联机帮助或仅查询谷歌WHILE Transact-SQL – 2012-03-02 18:48:59

回答

1

你不需要一本书 - 只需在cursor functionality in T-SQL上阅读。有代码示例演示循环。就像Oded说的那样,循环是一种必要的构造,而SQL是一种声明性语言 - 循环使用SQL是“做错了”,尽管当你真的需要“现在就做”时,功能就在那里。

+0

如果您被迫在SQL中循环,至少使用WHILE。切勿使用游标!游标将最终杀死你的表现。我再说一遍,不要使用游标。 – 2012-03-02 16:54:45

+0

感谢您的提示。将阅读有关这两个主题,看看为什么一个比其他更好。 – Warne 2012-03-02 17:21:31

+0

我不同意CURSOR会杀死你的性能的评论,因为在某些情况下,CURSOR是唯一的选择。例如,通过创建一个从CURSOR操作中生成的动态SQL字符串来执行基于集合的操作。从来没有一个非常强大的词。 – wergeld 2012-03-02 18:26:19

1

SQL循环与其他任何编程循环几乎相同,因为它会一直运行,直到不再满足给定条件。然而,正如Oded所提到的,SQL主要是一种基于SET的语言,并且作为过程语言而言更弱。请参阅this文章以获取有关设置与过程之间差异的更多信息,尤其是涉及到SQL时。

因此,总而言之,寻找重写任何循环查询的方法,以便它们一次基于一组数据进行更多的SET。如果你不能,那么也许这对代码来说更是一个问题,而不是SQL

下面是一个很好的解决方案,通常可以避免while循环,并且已经被SQL团队很好地实现。我们希望,这可以帮助你,如果你不能去代码和SQL

  • CTE仍然在寻找一个有效的解决方案,或公用表表达式是非常强大的,特别是如果你需要像recursion
+0

感谢您的输入。例如,我正在考虑场景中的所有行。像这样的情况可能需要循环。 – Warne 2012-03-02 17:18:31

+0

我已经更新了我的答案,指出你在CTE的方向。它们通常是一种更有效的方式来完成通常在循环中完成的任务。通常,它们会与ROW_NUMBER()和PARTITION结合使用。然而,我会重新尝试在SET逻辑中思考,如果你不能以这种方式创建解决方案(特别是如果你指的是行“执行”的事情),那么使用代码 – 2012-03-02 17:26:40

+0

CTE可能会做到这一点。将阅读有关它。谢谢。 – Warne 2012-03-02 17:43:51

0

MSDN通常是Microsoft技术栈中任何内容的最佳联机文档。

MSDN - While (Transact-SQL)

+0

谢谢你的link.Agree,MSDN似乎是一个信息的好地方。 – Warne 2012-03-02 17:19:57