sql-server - studio - sql server tutorial



Schéma de base de données, auto-incrémentation (1)

Je voudrais aller avec une colonne calculée pour PhraseVersion , qui prendra le nombre de lignes avec le même PhraseID et Id inférieur ou égal à la ligne actuelle.

Pour ce faire, vous devez créer un fichier UDF pour calculer 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

Ensuite, créez la table avec la colonne calculée:

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

GO

Maintenant pour le test - insérez 4 enregistrements:

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

Sélectionner:

SELECT *
FROM T

Résultats:

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

Vous pouvez voir une démonstration en direct sur rextester.

Question de base de données ici. Est-il possible de faire un auto-incrément sur une pièce d'identité secondaire ou trentiaire? J'ai besoin de créer quelque chose à base de version, alors imaginez ceci:

ID  Phrase  PhraseID    PhraseVersion
1   ""      1           1
2   ""      1           2
3   ""      1           3
4   ""      2           1

PhraseID peut être le même numéro, une fois ajouté à la base de données. Si le PhraseID existe, je veux que PhraseVersion s'auto-incrémente en nombre. Si le PhraseID n’existe pas, je souhaite que PhraseVersion recommence, à partir de 1.

Je ce possible?





sql-server