SQL Server 2008: Restricciones de comprobación que garantiza que sólo un valor en todas las filas se pone a 1 y los demás son 0

StackOverflow https://stackoverflow.com/questions/3804663

Pregunta

Hay una necesidad de restricción de acumulación en la columna que garantiza que sólo un valor en todas las filas es 1 y todos los demás son 0.

Solución con disparadores existe, pero me gustaría tener algo incorporado.

Es tal cosa es posible en absoluto?

¿Fue útil?

Solución

Editar

En realidad me he dado cuenta de que está en SQL Server 2008 se puede usar un índice filtrado para este

CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1

Respuesta original

La forma más fácil, probablemente sería la de almacenar éste pk especial en una tabla de una fila separada. El aspecto no es más que una fila se puede hacer cumplir con las restricciones de comprobación.

CREATE TABLE OneRowTable
(
lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'),
OtherTablePK int
);

De lo contrario suponiendo que podría tener un campo de ID compuesta de números enteros positivos se podría añadir una columna calculada con la siguiente definición

case when col=1 then -1 else id end

y añadir una restricción única a eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top