I’m using SQL Server 2005.
I have a field that must either contain a unique value or a NULL value. I think I should be enforcing this with either a CHECK CONSTRAINT or a TRIGGER for INSERT, UPDATE.
Is there an advantage to using a constraint here over a trigger (or vice-versa)? What might such a constraint/trigger look like?
Or is there another, more appropriate option that I haven’t considered?
Here is an alternative way to do it with a constraint. In order to enforce this constraint you’ll need a function that counts the number of occurrences of the field value. In your constraint, simply make sure this maximum is 1.
Constraint:
EDIT I can’t remember right now — and can’t check it either — whether the constraint check is done before the insert/update or after. I think after with the insert/update being rolled back on failure. If it turns out I’m wrong, the 2 above should be a 1.
Table function returns an int and uses the following select to derive it
This should be reasonably fast if your column as a (non-unique) index on it.