循环并选择

时间:2015-08-11 01:38:55

标签: sql sql-server tsql

由于我无法控制的原因,我需要使用SQL服务器来连续返回数字。 基本上从1到某些任意的@param,如下:

|-----|
|Value|
|-----|
|  1  |
|  2  |
|  3  |
|-----|

我试图使用while循环并从中选择当前索引,但这会返回多个结果集而不是一个不起作用的结果集。我可以通过一个临时表来完成我想要做的事情,但不愿意走那条路。必须有一些漂亮的T-SQL方式来做我想做的事情。

提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

您可以使用 Tally Table 。有关更多信息,请阅读Jeff Moden撰写的article

DECLARE @param INT = 1000;

WITH E1(N) AS( -- 10 rows
    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 
),
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 100 rows
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 1,0000 rows
E8(N) AS(SELECT 1 FROM E4 a CROSS JOIN E4 b), -- 100,000,000 rows
Tally(N) AS(
    SELECT TOP(@param)
        ROW_NUMBER() OVER(ORDER BY (SELECT NULL))
    FROM E8 
)
SELECT * FROM Tally

答案 1 :(得分:0)

您可以使用CTE通过选择前一个值+ 1中的起始值和并集来执行此操作。这是生成序列的一种非常常见的策略。

请参阅此文章以获得一个好例子: https://smehrozalam.wordpress.com/2009/06/09/t-sql-using-common-table-expressions-cte-to-generate-sequences/