Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Schemat bazy danych, autoinkrementacja

Wybrałbym obliczoną kolumnę dla PhraseVersion , która zliczy wiersze z tym samym PhraseID i Id mniejsza lub równa aktualnemu wierszowi.

Aby to zrobić, musisz utworzyć UDF, aby obliczyć wersję Phrase:

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

Następnie utwórz tabelę z obliczoną kolumną:

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

GO

Teraz do testu - wstaw 4 rekordy:

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

Wybierz:

SELECT *
FROM T

Wyniki:

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

Możesz zobaczyć demo na żywo na rextesterze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server UNION — jakie jest domyślne zachowanie ORDER BY?

  2. Przechowywanie komunikatu raiserror z SqlServer w C#

  3. tożsamość z sql insert przez jdbctemplate

  4. Zobacz historię zadań agenta SQL Server za pomocą programu SSMS

  5. Jak utworzyć alias typu danych zdefiniowanego przez użytkownika w SQL Server przy użyciu T-SQL