Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于前缀生成递增数字_Sql Server - Fatal编程技术网

Sql server 基于前缀生成递增数字

Sql server 基于前缀生成递增数字,sql-server,Sql Server,我有一个包含许多列的数据库表,包括一个Guid主键。这个很好用,我不能改变 我需要生成一个带有已知前缀和递增填充数字的“友好”字符串标识符 例如,我有这些行,我需要创建FriendlyID列 ID | Prefix | FriendlyID (PK, uniqueidentifier) |(nvarchar)| -------------------------------------|----

我有一个包含许多列的数据库表,包括一个Guid主键。这个很好用,我不能改变

我需要生成一个带有已知前缀和递增填充数字的“友好”字符串标识符

例如,我有这些行,我需要创建FriendlyID列

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)

行号有什么问题?