Tsql 如何在t-sql中选择间隔?
我想要一个类似于a的结果,对于int a=0;a使用类似的方法: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
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;