sql >> Databáze >  >> RDS >> Sqlserver

Schéma databáze, autoinkrementace

Chtěl bych použít vypočítaný sloupec pro PhraseVersion , který převezme počet řádků se stejným PhraseID a Id nižší nebo rovno aktuálnímu řádku.

Chcete-li to provést, musíte vytvořit UDF pro výpočet 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

Poté vytvořte tabulku s vypočítaným sloupcem:

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

GO

Nyní k testu - vložte 4 záznamy:

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

Vyberte:

SELECT *
FROM T

Výsledky:

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

Živé demo můžete vidět na rextesteru.



  1. Uložte více bitových hodnot do jednoho sloupce tabulky

  2. Co jsou aplikace v reálném čase?

  3. Jak změnit uživatelské heslo v PostgreSQL

  4. Úroveň izolace zavázaná ke čtení