2015-12-24 84 views
0

程序中有一些while循環,我想將它們刪除/用臨時表或其他任何(非遊標)替換。在T-SQL語句中刪除while循環

下面我創建了一個虛擬語法,我必須根據一些計算填充TEMP_TABLE表。請提供任何更好的選擇,這樣做:

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 
+2

有使用符合表以填充上這樣的例子很多日期表?你有沒有嘗試搜索任何東西?線索是生成數字範圍並使用簡單的'INSERT INTO ... SELECT ... FROM(理貨)... WHERE(循環條件)' – lad2025

回答

1

這裏使用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 

欲瞭解更多信息的一種方式上Generate a set or sequence without loops