2017-04-07 90 views
0

数据库问题在这里。 是否可以对二级或三级ID进行自动增量? 我需要的东西versionbased,所以想象一下:数据库方案,自动增量

ID Phrase PhraseID PhraseVersion 
1 ""  1   1 
2 ""  1   2 
3 ""  1   3 
4 ""  2   1 

PhraseID可以是相同的号码,当添加到数据库中。 如果PhraseID存在,我希望PhraseVersion自动增加数量。 如果PhraseID不存在,我希望PhraseVersion重新开始,从1开始计数。

这可能吗?

回答

1

我会用一个计算列PhraseVersion,这将采取相同的行数PhraseIDId低于或等于当前行。

要做到这一点,你需要创建一个UDF计算PhraseVersion:

CREATE FUNCTION dbo.GetPhraseVersion (
    @PhraseId int, 
    @id int 
) 
RETURNS INT 
AS 
BEGIN 
    RETURN (
     SELECT COUNT(*) 
     FROM T 
     WHERE PhraseId = @PhraseId 
     AND Id <= @id 
    ) 
END 
GO 

然后,计算列创建该表:

CREATE TABLE T 
(
    id int identity(1,1), 
    PhraseId int, 
    PhraseVersion as dbo.GetPhraseVersion(PhraseId, id) 
) 

GO 

现在的测试 - 插入4记录:

INSERT INTO T (PhraseId) VALUES(1),(1),(1),(2) 

选择:

SELECT * 
FROM T 

结果:

id PhraseId PhraseVersion 
1 1   1 
2 1   2 
3 1   3 
4 2   1 

You can see a live demo on rextester.

+0

这是可靠的高频插入?是否可以重复PhraseId - PhraseVersion对? – ibubi

+0

我不知道。首先,我不知道你认为高频率,第二我从来没有测试过大量的数据。作为你的秘密问题,这不应该发生。 –