SQL SERVER 生成臨時數字序列
阿新 • • 發佈:2020-07-30
最近在編寫 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