我有一个(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