我希望结果类似于程序语言中的for (int a=0; a<10; a++) { print(a); }
。因此,结果应该是
0
1
2
3
4
5
6
7
8
9
是的,我知道这不是一个声明性的事情,但现在这才是我真正需要的。也许一些窗口功能可以做到这一点?还是程序性查询?
答案 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
内部存储过程将用于各种目的。它的用途 在线似乎非常普遍,即使它没有记录, 不支持,它可能会消失一天,因为它只包含一个 有限的,非唯一的和非连续的值集。