【发布时间】:2013-06-26 23:19:05
【问题描述】:
我们在 SQL Server 2008 中使用 WHILE 循环而不是光标。现在我想找出在我的程序中编写WHILE循环的最佳方法。
方法一(使用 BREAK 关键字):
DECLARE @V_Counter INT = 1;
WHILE (1 = 1)
BEGIN
PRINT @V_Counter;
SET @V_Counter = @V_Counter + 1;
IF @V_Counter = 4
BEGIN
BREAK;
END
END
方法2(使用BOOL VARIABLE):
DECLARE @V_Counter INT = 1, @V_CloseLoop TINYINT = 1;
WHILE (@V_CloseLoop = 1)
BEGIN
PRINT @V_Counter;
SET @V_Counter = @V_Counter + 1;
IF @V_Counter = 4
BEGIN
SET @V_CloseLoop = 0;
END
END
我的问题是:
- 我必须使用哪种方法或两者相同?
- 我还有其他方法可以使用吗?
提前谢谢...
【问题讨论】:
-
我们使用 WHILE 循环...而不是光标 -
WHILE仍然几乎和光标一样糟糕。您应该检查是否可以避免使用WHILE并采用真正基于集合的方法。 那确实会显着提高速度 -
@marc_s 您能否提供该方法的任何链接或任何示例。我想实现最佳方法而不是光标。我发现 While 循环比游标好。所以我试图在我的程序中实现它。
-
只需在 Google(或 Bing)中搜索
SQL Server Thinking in Sets,您就会拥有 大量 链接,例如T-SQL Foundations: Thinking in Sets 和很多很多! -
在许多情况下,使用内联函数也有助于避免游标。它会加快速度。
-
@revoua 请具体说明。我必须对表的每一行执行一组操作和业务登录。我该如何实现。
标签: sql sql-server sql-server-2008-r2 while-loop break