sql-server

sql server - Esquema de base de datos, autoincremento



sql-server (1)

Iría con una columna calculada para PhraseVersion , que tomará el recuento de filas con el mismo PhraseID e Id inferiores o iguales a la fila actual.

Para hacer eso, debe crear un UDF para calcular la 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

Luego, cree la tabla con la columna calculada:

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

Ahora para la prueba, inserte 4 registros:

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

Seleccionar:

SELECT * FROM T

Resultados:

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

Puedes ver una demostración en vivo en rextester.

Pregunta de la base de datos aquí. ¿Es posible hacer un autoincremento en una identificación secundaria o una identificación de terceros? Necesito hacer algo basado en la versión, así que imagina esto:

ID Phrase PhraseID PhraseVersion 1 "" 1 1 2 "" 1 2 3 "" 1 3 4 "" 2 1

PhraseID puede ser el mismo número, cuando se agrega a la base de datos. Si el PhraseID existe, quiero que PhraseVersion se incremente automáticamente en número. Si el PhraseID no existe, quiero que PhraseVersion comience de nuevo, contando desde 1.

Yo esto posible?