如何在t-sql中选择一个区间?

时间:2017-04-07 19:36:08

标签: tsql

我希望结果类似于程序语言中的for (int a=0; a<10; a++) { print(a); }。因此,结果应该是

0
1
2
3
4
5
6
7
8
9

是的,我知道这不是一个声明性的事情,但现在这才是我真正需要的。也许一些窗口功能可以做到这一点?还是程序性查询?

3 个答案:

答案 0 :(得分:4)

使用类似的东西:

with cte as (
    select 0 as t
    union all
    select t + 1 from cte
    where t < 9
)
select * from cte

答案 1 :(得分:1)

除了已接受的答案之外,还有更多程序性解决方案:

DECLARE @n INT=-10;
DECLARE @loop TABLE (n INT);

WHILE @n <= 10
BEGIN
  INSERT INTO @loop VALUES(@n);
  SET @n += 1;
END;

SELECT * FROM @loop;

答案 2 :(得分:1)

@xQbert给了一个很好的link一个更好的解决方案,虽然它使用了一个未记录的功能,后来可能会从MS-SQL中消失。我目前的实验表明,在MS SQL 2016中它可以工作:

SELECT TOP (1000) n = ROW_NUMBER() OVER (ORDER BY number) 
  FROM [master]..spt_values ORDER BY n;

根据提到的链接,[master]..spt_values

  内部存储过程将

用于各种目的。它的用途   在线似乎非常普遍,即使它没有记录,   不支持,它可能会消失一天,因为它只包含一个   有限的,非唯一的和非连续的值集。