Представьте, что у меня есть таблица с целыми столбцами 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;
Оно работает, но мне кажется, что есть более элегантный способ добиться того же результата (например, этот вопросник хочет проверить, что хотя бы одно поле не является нулевым, а ключевое слово COALESCE
работает хорошо в этом случае).