虚拟数字辅助表
1. 概念
概念来源于《Microsoft SQL Server 2012 High-Performance T-SQL Using Window Functions》
代码如下:
GO
/****** Object: UserDefinedFunction [dbo].[GetNums] Script Date: 2018/5/25 9:20:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[GetNums]
(
@Low BIGINT,
@High BIGINT
)
RETURNS TABLE
AS
RETURN
WITH
L0 AS (SELECT C=1 FROM (VALUES(1),(1)) AS L0(C)),
L1 AS (SELECT C=1 FROM L0 A CROSS JOIN L0 B),
L2 AS (SELECT C=1 FROM L1 A CROSS JOIN L1 B),
L3 AS (SELECT C=1 FROM L2 A CROSS JOIN L2 B),
L4 AS (SELECT C=1 FROM L3 A CROSS JOIN L3 B),
L5 AS (SELECT C=1 FROM L4 A CROSS JOIN L4 B),
Nums AS (SELECT RowNum=ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM L5)
SELECT Num=@Low + RowNum - 1 FROM Nums ORDER BY RowNum ASC
OFFSET 0 ROWS FETCH FIRST @High - @Low + 1 ROWS ONLY;
GO
调用:
SELECT * FROM [dbo].[GetNums](1, 10)
结果:

2. 案例
to be continued
本文介绍了一种在Microsoft SQL Server中使用T-SQL创建虚拟数字辅助表的方法,该方法通过递归CTE(通用表表达式)实现,适用于生成连续整数序列。此技术对于数据处理、测试和报表生成等场景非常有用。
4017

被折叠的 条评论
为什么被折叠?



