Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Lược đồ cơ sở dữ liệu, tự động tăng

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 PhraseIDId 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tham gia chéo sql - có ai tìm thấy công dụng gì cho nó?

  2. TSQL - Cách sử dụng GO bên trong khối BEGIN .. END?

  3. Cách gửi kết quả truy vấn qua email dưới dạng tệp đính kèm trong SQL Server (T-SQL)

  4. Hành vi @@ rowcount không mong muốn bên trong UDF trong MS SQL 2019

  5. Chuyển đổi truy vấn SQL Server sang MySQL