SQL Server 2008: Controlla i vincoli che garantisce che un solo valore in tutte le righe è impostato a 1 e gli altri sono 0

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

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top