sql >> Database >  >> RDS >> Sqlserver

Databaseschema, automatisch verhogen

Ik zou gaan voor een berekende kolom voor PhraseVersion , dat zal het aantal rijen met dezelfde PhraseID . nemen en Id lager of gelijk aan de huidige rij.

Om dat te doen, moet u een UDF maken om de PhraseVersion te berekenen:

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

Maak vervolgens de tabel met de berekende kolom:

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

GO

Nu voor de test - voeg 4 records in:

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

Selecteer:

SELECT *
FROM T

Resultaten:

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

Je kunt een live demo zien op rextester.



  1. Hoe de REGEX_REPLACE()-functie werkt in MySQL

  2. MariaDB JSON_QUOTE() uitgelegd

  3. SQL Server 2016:een weergave maken

  4. Oproep naar een lidfunctie execute() op boolean in