Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Схема на база данни, автоинкремент

Бих използвал изчислена колона за PhraseVersion , което ще отнеме броя на редовете със същия PhraseID и Id по-нисък или равен на текущия ред.

За да направите това, трябва да създадете UDF, за да изчислите 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

След това създайте таблицата с изчислената колона:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпълнете съхранена процедура в друга съхранена процедура в SQL сървър

  2. SQL Server ИЗБЕРЕТЕ ПОСЛЕДНИ N реда

  3. Замяна на NULL с 0 в заявка за SQL сървър

  4. Вземете подниз в SQL Server

  5. Използвайте FILE_NAME(), за да върнете логическото име на файл за даден идентификатор на файл в SQL Server