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でライブデモを見ることができます。