在 SQL 中產生數字序列:UDF 和輔助表
需要在 SQL 查詢中高效產生數字序列? 避免複雜的循環或遞歸 CTE;相反,利用使用者定義函數 (UDF) 或輔助表的強大功能。這種方法提供了簡單性和效能優勢。
方法一:使用者定義函數(UDF)
此 UDF 產生指定範圍內的數字序列:
<code class="language-sql">CREATE FUNCTION GetNumberSequence ( @Start INT, @End INT ) RETURNS TABLE AS BEGIN RETURN ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS N FROM sys.all_columns AS ac1 CROSS JOIN sys.all_columns AS ac2 WHERE ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) BETWEEN @Start AND @End ); END;</code>
此函數以起始值 (@Start
) 和結束值 (@End
) 作為輸入。 ROW_NUMBER()
函數為每一行分配一個唯一的編號,CROSS JOIN
有效地產生序列。
使用範例:
產生 1 到 100 之間的數字:
<code class="language-sql">SELECT * FROM GetNumberSequence(1, 100);</code>
方法二:永久輔助表
對於頻繁使用的序列,永久輔助表可提供卓越的效能。 建立一個像這樣的表格:
<code class="language-sql">CREATE TABLE dbo.Numbers ( N INT PRIMARY KEY ); INSERT INTO dbo.Numbers (N) SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM sys.all_columns AS ac1 CROSS JOIN sys.all_columns AS ac2;</code>
這將建立一個包含大量數字序列的表 (dbo.Numbers
)。 然後,您可以輕鬆查詢此表以檢索所需的序列。
選出正確的方法
兩種方法都有效。 UDF 非常適合一次性序列生成,而永久輔助表最適合頻繁存取的序列,可顯著提高效能。 選擇取決於您的應用程式的特定要求和序列產生的頻率。
以上是如何使用UDF或輔助表在SQL中有效率地產生數列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!