You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中生成带连续编号的分支与用户数据?

实现方案:为SQL Server的usersTable批量生成分支用户数据

嘿,这个需求用CTE(公共表表达式)来实现就非常高效,不用手动写几千条INSERT语句,逻辑清晰还容易维护。下面给你两种实用的实现方式,你可以根据自己的场景选择:

方法一:递归CTE生成分支与用户序列

这种方法通过递归分别生成分支编号和每个分支下的用户序号,再交叉组合得到所有数据:

WITH BranchNumbers AS (
    -- 递归生成1到700的分支编号
    SELECT 1 AS BranchNum
    UNION ALL
    SELECT BranchNum + 1
    FROM BranchNumbers
    WHERE BranchNum < 700
),
UserNumbers AS (
    -- 为每个分支生成3个用户的本地序号(1-3)
    SELECT 1 AS UserSeq
    UNION ALL
    SELECT UserSeq + 1
    FROM UserNumbers
    WHERE UserSeq < 3
)
INSERT INTO usersTable (users, branch)
SELECT 
    -- 生成全局连续的用户名称,格式为userXXX(XXX是带前导零的3位编号)
    'user' + RIGHT('000' + CAST((b.BranchNum - 1)*3 + u.UserSeq AS VARCHAR(3)), 3) AS users,
    -- 生成分支名称,格式为branchXXX
    'branch' + RIGHT('000' + CAST(b.BranchNum AS VARCHAR(3)), 3) AS branch
FROM BranchNumbers b
CROSS JOIN UserNumbers u
ORDER BY b.BranchNum, u.UserSeq;

代码说明:

  • BranchNumbers:递归生成1到700的数字,对应branch001到branch700的序号。
  • UserNumbers:递归生成1到3的数字,代表每个分支下的3个用户。
  • 交叉连接后,通过(b.BranchNum - 1)*3 + u.UserSeq计算出全局连续的用户编号,再用RIGHT('000' + ..., 3)保证编号是3位带前导零的格式。
  • 最后将组合好的用户和分支名称插入到usersTable中,id列作为自增列会自动填充。

方法二:利用系统视图生成分支序列

如果觉得递归CTE不够直观,也可以用系统视图生成足够多的行,再筛选出700个分支:

-- 定义每个分支下的3个用户序号
WITH UserSeq AS (
    SELECT 1 AS Seq UNION ALL SELECT 2 UNION ALL SELECT 3
),
BranchSeq AS (
    -- 通过系统视图交叉连接生成足够多的行,取前700个作为分支编号
    SELECT TOP 700 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Num
    FROM sys.all_columns ac1
    CROSS JOIN sys.all_columns ac2
)
INSERT INTO usersTable (users, branch)
SELECT 
    'user' + RIGHT('000' + CAST((bs.Num -1)*3 + us.Seq AS VARCHAR(3)), 3),
    'branch' + RIGHT('000' + CAST(bs.Num AS VARCHAR(3)), 3)
FROM BranchSeq bs
CROSS JOIN UserSeq us
ORDER BY bs.Num, us.Seq;

代码说明:

  • UserSeq:直接用UNION ALL生成3个用户序号,简单直接。
  • BranchSeq:利用sys.all_columns的交叉连接生成大量行,再通过ROW_NUMBER()生成1到700的分支编号(ORDER BY (SELECT NULL)是为了避免不必要的排序)。
  • 后续的用户和分支名称生成逻辑和方法一一致,最终批量插入数据。

额外调整建议:

如果需要用户名称包含分支前缀(比如branch001_user001),只需要把users字段的生成逻辑改成:

'branch' + RIGHT('000' + CAST(b.BranchNum AS VARCHAR(3)), 3) + '_user' + RIGHT('000' + CAST(u.UserSeq AS VARCHAR(3)), 3)

内容的提问来源于stack exchange,提问作者Mar1009

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:58:42