简体   繁体   English

在T-SQL语句中删除while循环

[英]Remove while loop in T-SQL statement

There were some while loops in a procedure and I want to remove them / replace with temp tables or any other ( not cursor) . 过程中有一些while循环,我想删除它们/用临时表或其他任何表(不是游标)代替。

Below I have created a dummy syntax, I have to populate the TEMP_TABLE table based on some calculations. 下面,我创建了一个虚拟语法,我必须根据一些计算来填充TEMP_TABLE表。 Please share any better option to do the same: 请分享任何更好的选择来执行以下操作:

SET @J = 0
SET @DIFFERENCE = 10
SET @INCREMENT = 2

WHILE (@J < @DIFFERENCE) 
BEGIN   
    SET @TO_DATE = (SELECT DATEADD(D, @INCREMENT, @TO_DATE))   

    IF (@TO_DATE <= GETDATE())
       INSERT INTO TEMP_TABLE 
       VALUES(@J, @TO_DATE)   

    SET @J = @J + @INCREMENT  
END

Here is one way using Tally table 这是使用Tally table一种方法

;WITH e1(n) AS
(
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
), -- 10
e2(n) AS (SELECT 1 FROM e1 CROSS JOIN e1 AS b), -- 10*10
e3(n) AS (SELECT 2 FROM e1 CROSS JOIN e2), -- 10*100
e4(n)  as ( SELECT n = ROW_NUMBER() OVER (ORDER BY n) FROM e3)
SELECT n,
       Dateadd(D, n, @TO_DATE)
FROM   e4
WHERE  N <= @DIFFERENCE
       AND N%@INCREMENT = 0 

For more info on Generate a set or sequence without loops 有关Generate a set or sequence without loops更多信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM