sql >> データベース >  >> RDS >> Sqlserver

データベーススキーム、自動インクリメント

    PhraseVersionの計算列を使用します 、同じPhraseIDの行数を取得します およびId 現在の行以下。

    これを行うには、PhraseVersionを計算するためのUDFを作成する必要があります:

    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
    

    次に、計算された列を使用してテーブルを作成します。

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

    次にテストします-4つのレコードを挿入します:

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

    選択:

    SELECT *
    FROM T
    

    結果:

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

    rextesterでライブデモを見ることができます。



    1. HDFSの概要| HDFSとは何ですか?どのように機能しますか?

    2. HibernateでPostgreSQLLTREE列をマッピングするときにエラーが発生する

    3. PostgresPlus AdvancedServer9.3Betaの新しいOracle互換機能

    4. 1つの列を複数の外部キーとして参照することは可能ですか?