2017-04-07 89 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

我不知道。首先,我不知道你認爲高頻率,第二我從來沒有測試過大量的數據。作爲你的祕密問題,這不應該發生。 –