Sql server 基于前缀生成递增数字
我有一个包含许多列的数据库表,包括一个Guid主键。这个很好用,我不能改变 我需要生成一个带有已知前缀和递增填充数字的“友好”字符串标识符 例如,我有这些行,我需要创建FriendlyID列Sql server 基于前缀生成递增数字,sql-server,Sql Server,我有一个包含许多列的数据库表,包括一个Guid主键。这个很好用,我不能改变 我需要生成一个带有已知前缀和递增填充数字的“友好”字符串标识符 例如,我有这些行,我需要创建FriendlyID列 ID | Prefix | FriendlyID (PK, uniqueidentifier) |(nvarchar)| -------------------------------------|----
ID | Prefix | FriendlyID
(PK, uniqueidentifier) |(nvarchar)|
-------------------------------------|----------|------------
93AE63F0-4556-426A-B61D-A86D66DCD904 | AB | AB0001
191D1186-1C4D-4A6C-A83B-D803BFAA2DF1 | AB | AB0002
F28CA0D0-4ED9-4F89-9467-F7C2B7DFDCEE | BC | BC0001
9DACD157-FF51-447B-BDD6-6A82E3E45758 | DE | DE0001
AF3952B8-2E28-4D85-85C8-473DA64D6BDB | BC | BC0002
9DACD157-FF51-447B-BDD6-6A82E3E45758 | AB | AB0003
数字需要递增,但仅基于前缀
我知道如何创建一个自动递增的整数列,但我不知道如何使它在前缀内递增
如果更简单的话,我肯定可以构建FriendlyID来显示(例如,连接前缀和数字),但我希望数据库能够处理生成数字部分的操作,以确保不会出现冲突。如果重要的话,那将是在C#/Entity框架核心5中
在SQL Server中有这样做的方法吗?您可以使用
ROW\u number()
和相应的ORDER BY
子句对行进行编号:
SELECT
*,
CONCAT(
Prefix,
RIGHT(CONCAT('0000', ROW_NUMBER() OVER (PARTITION BY Prefix ORDER BY ID)), 4)
) AS FriendlyID
FROM (VALUES
('93AE63F0-4556-426A-B61D-A86D66DCD904', 'AB'),
('191D1186-1C4D-4A6C-A83B-D803BFAA2DF1', 'AB'),
('F28CA0D0-4ED9-4F89-9467-F7C2B7DFDCEE', 'BC'),
('9DACD157-FF51-447B-BDD6-6A82E3E45758', 'DE'),
('AF3952B8-2E28-4D85-85C8-473DA64D6BDB', 'BC'),
('9DACD157-FF51-447B-BDD6-6A82E3E45758', 'AB')
) v (ID, Prefix)
行号有什么问题?