SQL Server动态CTE生成带字母后缀连续序号无法自增问题求解
问题原因
你的现有递归CTE仅实现了单个seqno对应4个字母后缀的生成,没有加入seqno自增的遍历逻辑,同时输出时也没有把seqno和字母后缀做拼接,所以只能得到108对应的4条单字母后缀的结果。
修正后的SQL代码
DECLARE @OrderID INT = 215332, @MCHID INT = 188, @bbs_ups INT DECLARE @StartSeqno INT, @SeqCount INT = 4 -- 可调整该参数控制需要生成的seqno数量,当前设为4对应108、109、110、111四个值 SET @bbs_ups = 4 -- 提取起始seqno SELECT @StartSeqno = ISNULL((SELECT TOP 1 bbd_bundle_seqno FROM BAG_BundleStickerDetails WHERE bbd_order_id_fk = @OrderID AND bbd_mch_id_fk = @MCHID AND bbd_status = 'A' ORDER BY bbd_id DESC), 0) ;WITH SeqList AS ( -- 生成所需的seqno序列:从起始值开始共@SeqCount个 SELECT 1 as seq_counter, @StartSeqno as seqno UNION ALL SELECT seq_counter + 1, seqno + 1 FROM SeqList WHERE seq_counter < @SeqCount ), SuffixList AS ( -- 生成A-D的后缀序列 SELECT 1 as suffix_counter, CHAR(ASCII('A')) as suffix UNION ALL SELECT suffix_counter + 1, CHAR(ASCII(suffix) + 1) FROM SuffixList WHERE suffix_counter < @bbs_ups ) -- 两个序列笛卡尔关联得到所有组合,拼接后缀即可 SELECT seqno, CONCAT(seqno, suffix) as seqno_ups_desc FROM SeqList CROSS JOIN SuffixList ORDER BY seqno, suffix
核心改动说明
- 拆分两个递归CTE分别处理seqno序列、后缀序列的生成,逻辑更清晰易维护
- 用
CROSS JOIN对两个序列做笛卡尔积,自动得到每个seqno对应4个后缀的全量组合 - 通过
CONCAT函数拼接seqno和字母后缀,直接输出符合格式要求的seqno_ups_desc字段 - 调整
@SeqCount参数即可灵活控制需要生成的seqno数量,适配不同业务需求
内容的提问来源于stack exchange,提问作者kaminari
相关产品推荐
相关产品推荐

