我想实现一个带前缀的自动递增 ID,但如果它有不同的前缀,则重置该数字。
我想要的输出如下所示:
ID PREFIX PROJECTID
1 PID_ PID_1
2 PID_ PID_2
3 RID_ RID_1
4 RID_ RID_2
但是我用我的脚本得到的结果是这样的:
ID PREFIX PROJECTID
1 PID_ PID_1
2 PID_ PID_2
3 RID_ RID_3
4 RID_ RID_4
这是我创建表的脚本
CREATE TABLE PROJECTS
(ID INT IDENTITY(1,1) NOT NULL,
PREFIX NVARCHAR(10) NOT NULL,
PROJECTID AS ISNULL(PREFIX + CAST(ID AS NVARCHAR(10)), '') PERSISTED)
INSERT INTO PROJECTS(PREFIX) VALUES('PID_'),('PID_'),('RID_'),('RID_')
我正在使用 MS SQL 2012
最佳答案
你想要这样
CREATE TABLE #PROJECTS
(
ID INT IDENTITY(1, 1)
NOT NULL ,
PREFIX NVARCHAR(10) NOT NULL ,
PROJECTID NVARCHAR(11)
)
INSERT INTO #PROJECTS
( PREFIX )
VALUES ( 'PID_' ),
( 'PID_' ),
( 'RID_' ),
( 'RID_' )
假设您的表中有上述数据
现在,如果您想使用 DECLARE @PREFIX NVARCHAR(10) = 'RID_' 执行插入
INSERT INTO #PROJECTS
( PREFIX ,
PROJECTID
)
SELECT @PREFIX ,
@PREFIX + CAST(( COUNT(TT.rn) + 1 ) AS NVARCHAR(1))
FROM ( SELECT ROW_NUMBER() OVER ( PARTITION BY P.PREFIX ORDER BY ( SELECT
NULL
) ) AS rn
FROM #PROJECTS AS P
WHERE P.PREFIX = @PREFIX
) AS tt
请参阅上面的查询可能对您有所帮助。
关于sql - 带前缀的 MSSQL 自动递增 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37919864/