sql >> Databasteknik >  >> RDS >> Sqlserver

Databasschema, autoinkrement

Jag skulle gå med en beräknad kolumn för PhraseVersion , som tar antalet rader med samma PhraseID och Id lägre eller lika med den aktuella raden.

För att göra det måste du skapa en UDF för att beräkna 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

Skapa sedan tabellen med den beräknade kolumnen:

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

GO

Nu till testet - infoga 4 poster:

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

Välj:

SELECT *
FROM T

Resultat:

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

Du kan se en livedemo på rextester.



  1. Relationsmodellen

  2. Hur man får poster från de senaste 10 minuterna i MySQL

  3. Vad är Multi Dimension OLAP CUBE och ge exempel på kub med mer än 3 dimensioner

  4. Kopiera tabeller från en databas till en annan i SQL Server