整数列 Col1、Col2、Col3、Col4 を持つテーブルがあるとします。各列は NULL 可能であり、有効な行には正確に 1 列の値が含まれている必要があります (つまり、すべての NULL は無効であり、複数の列も無効です)。
現時点では、このようなチェック制約があります
ALTER TABLE [dbo].[MyTable] WITH CHECK
ADD CONSTRAINT [CK_ReportTemplateAttributes] CHECK
((
[Col1] IS NOT NULL AND [Col2] IS NULL AND [Col3] IS NULL AND [Col4] IS NULL
OR
[Col1] IS NULL AND [Col2] IS NOT NULL AND [Col3] IS NULL AND [Col4] IS NULL
OR
[Col1] IS NULL AND [Col2] IS NULL AND [Col3] IS NOT NULL AND [Col4] IS NULL
OR
[Col1] IS NULL AND [Col2] IS NULL AND [Col3] IS NULL AND [Col4] IS NOT NULL
));
GO;
それは機能しますが、同じ結果を達成するためのよりエレガントな方法があるかもしれないと思います(たとえば、この質問者は少なくとも1つのフィールドがnullではないことを確認したいと考えてCOALESCE
おり、その場合はキーワードがうまく機能します).