1. 程式人生 > 實用技巧 >SQL SERVER 生成臨時數字序列

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