如何在SQL Server单表中生成指定长度的唯一字符组合并填充
在SQL Server中生成指定字符集的4位唯一组合并填充到表中
实现思路
要生成[A-Z、0-9]的4位唯一组合(无重复元素、不考虑顺序的组合),核心是先构造包含所有候选字符的数据集,再通过有序自连接避免重复组合,最后拼接字符插入目标表。
具体SQL脚本
-- 构造包含所有候选字符的数据集 WITH AllChars AS ( -- 生成0-9数字字符 SELECT CHAR(ASCII('0') + n) AS CharVal FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS nums(n) UNION ALL -- 生成A-Z大写字母字符 SELECT CHAR(ASCII('A') + n) AS CharVal FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9), (10),(11),(12),(13),(14),(15),(16),(17),(18),(19), (20),(21),(22),(23),(24),(25)) AS letters(n) ), -- 生成4位唯一组合(通过字符顺序递增规则避免重复) Combinations AS ( SELECT c1.CharVal + c2.CharVal + c3.CharVal + c4.CharVal AS CodeValue FROM AllChars c1 JOIN AllChars c2 ON c2.CharVal > c1.CharVal JOIN AllChars c3 ON c3.CharVal > c2.CharVal JOIN AllChars c4 ON c4.CharVal > c3.CharVal ) -- 将组合批量插入到Code表 INSERT INTO Code (Code) SELECT CodeValue FROM Combinations;
脚本说明
- AllChars CTE:通过
CHAR()和ASCII()函数生成0-9、A-Z的完整字符集,确保覆盖需求中的所有候选字符。 - Combinations CTE:四次自连接时,强制后续字符的字典序大于前一个,这样能保证生成的组合唯一(比如只会出现
123A,不会生成A123或132A这类重复组合)。 - 插入操作:直接将生成的所有合法组合批量写入你的
Code表。
验证结果
执行脚本后,可通过以下语句查看结果:
SELECT * FROM Code ORDER BY Code;
返回的结果会和你C#示例中的格式一致,为有序的唯一组合。
内容的提问来源于stack exchange,提问作者Crawl
相关产品推荐
相关产品推荐

