Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Esquema de banco de dados, incremento automático


Eu usaria uma coluna computada para PhraseVersion , que levará a contagem de linhas com o mesmo PhraseID e Id inferior ou igual à linha atual.

Para fazer isso, você precisa criar uma UDF para calcular a 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

Em seguida, crie a tabela com a coluna computada:
CREATE TABLE T
(
    id int identity(1,1),
    PhraseId int,
    PhraseVersion as dbo.GetPhraseVersion(PhraseId, id)
)

GO

Agora para o teste - insira 4 registros:
INSERT INTO T (PhraseId) VALUES(1),(1),(1),(2)

Selecione:
SELECT *
FROM T

Resultados:
id  PhraseId    PhraseVersion
1   1           1
2   1           2
3   1           3
4   2           1

Você pode ver uma demonstração ao vivo no rextester.