由于我无法控制的原因,我需要使用SQL服务器来连续返回数字。 基本上从1到某些任意的@param,如下:
|-----|
|Value|
|-----|
| 1 |
| 2 |
| 3 |
|-----|
我试图使用while循环并从中选择当前索引,但这会返回多个结果集而不是一个不起作用的结果集。我可以通过一个临时表来完成我想要做的事情,但不愿意走那条路。必须有一些漂亮的T-SQL方式来做我想做的事情。
提前感谢您的帮助:)
答案 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/