sql-server – 检查约束只有三列中的一列是非空的

前端之家收集整理的这篇文章主要介绍了sql-server – 检查约束只有三列中的一列是非空的前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个(sql Server)表,包含3种类型的结果:FLOAT,NVARCHAR(30)或DATETIME(3个单独的列).我想确保对于任何给定的行,只有一列有结果,其他列为NULL.实现这一目标的最简单的检查约束是什么?

这方面的目的是尝试改进将非数字结果捕获到现有系统的能力.使用约束向表中添加两个新列以防止每行有多个结果是最经济的方法,不一定是正确的方法.

更新:对不起,数据类型snafu.遗憾的是,我并不打算将指示的结果类型解释为sql Server数据类型,只是通用术语,现在修复.

解决方法

以下应该做的伎俩:
CREATE TABLE MyTable (col1 FLOAT NULL,col2 NVARCHAR(30) NULL,col3 DATETIME NULL);
GO

ALTER TABLE MyTable
ADD CONSTRAINT CheckOnlyOneColumnIsNull
CHECK 
(
    ( CASE WHEN col1 IS NULL THEN 0 ELSE 1 END
    + CASE WHEN col2 IS NULL THEN 0 ELSE 1 END
    + CASE WHEN col3 IS NULL THEN 0 ELSE 1 END
    ) = 1
)
GO

猜你在找的MsSQL相关文章