sql >> Database teknologi >  >> RDS >> Sqlserver

Databaseskema, autoincrement

Jeg ville gå med en beregnet kolonne for PhraseVersion , der vil tage antallet af rækker med det samme PhraseID og Id lavere eller lig med den aktuelle række.

For at gøre det skal du oprette en UDF for at beregne 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

Opret derefter tabellen med den beregnede kolonne:

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

GO

Nu til testen - indsæt 4 poster:

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

Vælg:

SELECT *
FROM T

Resultater:

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

Du kan se en live demo på rextester.



  1. ExecuteReader kræver en åben og tilgængelig forbindelse. Forbindelsens aktuelle tilstand er Forbinder

  2. Introduktion af ny funktion - Spotlight Cloud Database Growth Report

  3. Skift størrelse på tabel-/kolonne-/indeksnavne i oracle 11g eller 12c

  4. 2 måder at få referatet fra en DateTime-værdi i Oracle Database