有没有办法在主键列中自动生成特定的字母数字数据?该列的最大长度为2个字符。
表格如下所示:
id
----
4S
33
J6
US我希望创建一个存储过程来插入一个随机的2个字母数字字符值。这在SQL Server中是可能的吗?
我需要它是自动生成的组合,如
id like '[A-Z][0-9]')
or (id like '[A-Z][A-Z]' )
or (id like '[0-9][0-9]' )
or (id like '[0-9][A-Z]' )发布于 2020-10-26 04:30:10
不要这样做。
主键是内部的行标识符,不应该是性感或好看的。它们的目的是唯一地标识行,仅此而已。
如果您需要某个键具有某种格式,这意味着您可能希望在用户界面中或通过API将其公开;主键不适合公开给外界。
现在,如果您需要公开一个密钥,那么您可以创建一个辅助密钥。这可能是一个额外的列,可能是一个自动生成的虚拟列,也可能是使用触发器填充的。
发布于 2020-10-26 06:16:38
实际上你有两个问题:
(随机唯一随机数组)
你可以在这里找到答案:Generate list of new unique random numbers in T-SQL
对于2个字符长度,您可以使用以下代码:
DECLARE @Base10ToBase36 AS TABLE (
ID TINYINT NOT NULL IDENTITY(0,1) PRIMARY KEY,
Symbol CHAR(1) NOT NULL CHECK(Symbol LIKE '[0-9,A-Z]')
)
INSERT INTO @Base10ToBase36(Symbol)
VALUES ('0'), ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9'),
('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H'), ('I'), ('J'),
('K'), ('L'), ('M'), ('N'), ('O'), ('P'), ('Q'), ('R'), ('S'), ('T'),
('U'), ('V'), ('W'), ('X'), ('Y'), ('Z')
SELECT TOP (1)
pos1.ID * 36 + pos0.ID AS Base10Number,
pos1.Symbol,
Pos0.Symbol,
CONCAT(pos1.Symbol, Pos0.Symbol) AS Base36
FROM @Base10ToBase36 AS pos0
CROSS JOIN @Base10ToBase36 AS pos1
ORDER BY NEWID() -- random关于random你可以在这里获得更多解释:Random record from a database table (T-SQL)
关于主键-我完全同意@TheImpaler。这是个坏主意
https://stackoverflow.com/questions/64527806
复制相似问题