Tôi sẽ đi với một cột được tính toán cho PhraseVersion
, điều đó sẽ tính số hàng có cùng PhraseID
và Id
thấp hơn hoặc bằng hàng hiện tại.
Để làm điều đó, bạn cần tạo một UDF để tính toán 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
Sau đó, Tạo bảng với cột được tính toán:
CREATE TABLE T
(
id int identity(1,1),
PhraseId int,
PhraseVersion as dbo.GetPhraseVersion(PhraseId, id)
)
GO
Bây giờ cho bài kiểm tra - chèn 4 bản ghi:
INSERT INTO T (PhraseId) VALUES(1),(1),(1),(2)
Chọn:
SELECT *
FROM T
Kết quả:
id PhraseId PhraseVersion
1 1 1
2 1 2
3 1 3
4 2 1
Bạn có thể xem bản demo trực tiếp trên rextester.