如何添加标识号,以便在插入行时,触发器会按如下方式分配增量编号?我正在使用SQL Server。
1 AAA
2 AAA
3 BBB
4 CCC
5 CCC
6 CCC
7 DDD
8 DDD
9 EEE
....
我想将其转换为:
1 AAA 1
2 AAA 2
4 CCC 1
5 CCC 2
6 CCC 3
7 DDD 1
8 DDD 2
答案 0 :(得分:1)
没有理由存储该值。您可以在需要时计算它:
select t.*, row_number() over (partition by name order by id) as nameId
from t;
答案 1 :(得分:0)
您可以创建一个FUNCTION
来获取名称并为给定参数提供MAX
标识:
CREATE FUNCTION [dbo].[GetIdentityForName] (@Name VARCHAR(MAX))
RETURNS INT
AS
BEGIN
RETURN
(SELECT ISNULL(MAX(NameId),0)+1
FROM YourTable
WHERE Name = @Name);
END
然后为DefaultValue
设置NameId
,以便在插入记录时调用该函数:
ALTER TABLE YourTable ADD CONSTRAINT
DF_Identity_NameId DEFAULT ([dbo].[GetIdentityForName](Name)) FOR NameId
假设YourTable
是{Id
,Name
,NameId
)。
我希望对你有所帮助:)。