Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Datenbankschema, Autoinkrement

Ich würde mit einer berechneten Spalte für PhraseVersion gehen , die die Anzahl der Zeilen mit derselben PhraseID übernimmt und Id kleiner oder gleich der aktuellen Zeile.

Dazu müssen Sie eine UDF erstellen, um die PhraseVersion zu berechnen:

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

Erstellen Sie dann die Tabelle mit der berechneten Spalte:

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

GO

Nun zum Test - fügen Sie 4 Datensätze ein:

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

Wählen Sie:

SELECT *
FROM T

Ergebnisse:

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

Sie können eine Live-Demo auf rextester sehen.