Представьте, что у меня есть таблица с целочисленными столбцами Col1, Col2, Col3, Col4. Каждый столбец имеет значение NULL и допустимая строка должна содержать значение ровно в 1 столбце (т. Е. Все значения NULL недействительны, а более 1 столбца также недопустимы).
На данный момент у меня есть проверочное ограничение, подобное этому
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 поле не равно нулю, а ключевое слово COALESCE
хорошо работает в этом случае).