SQL Server 2008: Verifique as restrições que garantem que apenas um valor em todas as linhas está definido como 1 e outros são 0
-
25-09-2019 - |
Pergunta
É necessário criar restrições na coluna que garante que apenas um valor em todas as linhas seja 1 e todos os outros sejam 0.
A solução com gatilhos existe, mas eu gostaria de ter algo embutido.
É isso possível?
Solução
Editar
Na verdade, acabei de notar que você está no SQL Server 2008, você pode usar um índice filtrado para isso
CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1
Resposta original
A maneira mais fácil provavelmente seria armazenar esse PK especial em uma mesa separada de uma linha. O aspecto não mais que uma linha pode ser aplicado com restrições de verificação.
CREATE TABLE OneRowTable
(
lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'),
OtherTablePK int
);
Caso contrário, assumindo que você pode ter um campo de identificação composto por números inteiros positivos, você poderá adicionar uma coluna calculada com a seguinte definição
case when col=1 then -1 else id end
e adicione uma restrição única a isso.