生成連續ID記錄行

ID值記錄行,即每一個數字一行的集合,有些時候在SQL中可以作為輔助表使用,從而用SQL的集合思維去高效解決問題,而不是用循環。
用自定義函數(UDF)來實現就不說了,無非是在裡面寫一個循環,住表變量裡插數據,再返回那個表變量。
下面介紹幾種不用UDF實現的方法。

小範圍的數字記錄

可以巧用系統表來獲取1到2048之間的數字:

SELECT number FROM master..spt_values
WHERE Type = 'P' AND number BETWEEN 1 AND 1024

特定的枚舉值

比如返回1,7,9,10這樣沒有規律的集合,而且量不大,便於直接枚舉。
可以通過從MSSQL 2008開始的表值構造函數(Table Value Constructor)去實現:

SELECT T.Num
FROM (VALUES (1),(7),(9),(10)) AS T(Num)

當然用這個特性還可以構建其他多列不同類型值的集合,比如返回a,b,c,d這樣的集合。

公用表達式(CTE)遞歸查詢產生大量連續數據行(性能不佳)

利用遞歸查詢的簡潔寫法去實現:

   WITH cte(Num) AS 
    (
        SELECT 1
    UNION ALL
        SELECT Num + 1 FROM cte WHERE Num <= 99
    ) 
    SELECT * FROM cte

如果是Oracle,除了CTE外,還可以用它專有的更為簡潔的遞歸語法:

SELECT ROWNUM FROM dual CONNECT BY LEVEL <= 50

猜你喜欢

转载自blog.csdn.net/benjayming/article/details/45874623