虚拟数字辅助表

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虚拟数字辅助表

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值