SQL SERVER 生成临时数字序列

最近在编写 SQL 语句时,需要临时生成一个数字序列,以便和其他表进行合并,但是不要使用表或者生成临时表,要求结果大致如下:

序号
1
2
3
4
5
……

不过 SQL 并没有直接的函数支持这件事,所以在网上查了很多,都不太满足想要的,大致原因有这些:

  1:不太容易理解;

  2:性能开销大;

  3:需要从其他表进行查询或者需要生成临时表;

  4:范围有限制,只能生成一定序列;

最后找到了一个比较满意的:(在我的数据库上 100,000 行花了3秒)

SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n FROM 
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x1(x),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x2(x),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x3(x),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x4(x),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x5(x)
ORDER BY n

 最后附上来源网址,那上面还要很多关于这个问题的讨论:https://www.itranslater.com/qa/details/2325814893695468544

猜你喜欢

转载自www.cnblogs.com/Romanticcat-Lin/p/13403938.html
今日推荐