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

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

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top