SQL Server 2008: Controlla i vincoli che garantisce che un solo valore in tutte le righe è impostato a 1 e gli altri sono 0
-
25-09-2019 - |
Domanda
V'è la necessità di vincolo generazione su colonna che garantisce che un solo valore in tutte le righe è 1 e tutti gli altri sono 0.
Soluzione con trigger esiste ma vorrei avere qualcosa di costruito in.
E 'una cosa possibile a tutti?
Soluzione
Modifica
In realtà ho appena notato siete su SQL Server 2008 è possibile utilizzare un indice filtrato per questo
CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1
risposta originale
Il modo più semplice sarebbe probabilmente per memorizzare questo pk speciale in una tabella una riga separata. L'aspetto non più di una riga può essere applicata con vincoli di controllo.
CREATE TABLE OneRowTable
(
lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'),
OtherTablePK int
);
In caso contrario, supponendo che si potrebbe avere un campo id composta da numeri interi positivi si potrebbe aggiungere una colonna calcolata con la seguente definizione
case when col=1 then -1 else id end
e aggiungere un vincolo univoco a questo.