Tsql 如何在t-sql中选择间隔?

Tsql 如何在t-sql中选择间隔?,tsql,Tsql,我想要一个类似于a的结果,对于int a=0;a使用类似的方法: with cte as ( select 0 as t union all select t + 1 from cte where t < 9 ) select * from cte 除了公认的答案之外,还有一个更具程序性的解决方案: DECLARE @n INT=-10; DECLARE @loop TABLE (n INT); WHILE @n <= 10 BEGIN INS

我想要一个类似于a的结果,对于int a=0;a使用类似的方法:

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

除了公认的答案之外,还有一个更具程序性的解决方案:

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;
@xQbert提供了一个非常好的解决方案,虽然它使用了一个未记录的特性,但后来可能会从MS-SQL中消失。我目前的实验表明,在MS SQL 2016中,它可以工作:

SELECT TOP (1000) n = ROW_NUMBER() OVER (ORDER BY number) 
  FROM [master]..spt_values ORDER BY n;
根据参考链接,[master]…spt_值

由内部存储过程用于各种目的。它的用途 在线似乎相当普遍,尽管它没有文件记录, 不受支持,它可能有一天会消失,因为它只包含一个 有限、非唯一和非连续的值集


取决于您的数据库引擎。如果您使用的是SQL Server,则可以查看游标或loops@Sparrow它是t-sql,因此数据库引擎是Microsoft sql Server。在我的具体案例中,是mssql 2016,即SEDE引擎。对于有这么多代表性的人,我希望你能够用谷歌搜索如何在TSQL中编写循环,或者如何在SQL中创建数字列表Server@dfundako试试看,没有任何有意义的结果,至少在谷歌搜索结果的前几页没有,这就是我想要帮助的。首先来自谷歌:tsql生成数字1到10谷歌搜索最困难的部分是知道谷歌应该做什么。知道如何拼写某事最困难的部分是知道如何拼写,这样我就可以查看如何拼写。。。愚蠢的字典我同意你的观点,但在这种情况下,你将有从0到10的序列,因为条件在增量完成之前保持不变。我看到人们对使用spt_值有点疯狂。就我个人而言,我认为这没有问题。当然,循环和递归的性能更高,尤其是在更大的范围内。对于N>2500和<6.5MM,只需通过从[master]…spt_值n1、[master]…spt_值n2中选择null,按顺序选择Top 10000 N=行数即可。。。如果有那么一天,当微软退休spt_值的时候,这将是一个很容易解决的问题。无论如何+1
SELECT TOP (1000) n = ROW_NUMBER() OVER (ORDER BY number) 
  FROM [master]..spt_values ORDER BY n;