加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:20:50 所属栏目:MsSql教程 来源:网络整理
导读:我有一个(SQL Server)表,包含3种类型的结果:FLOAT,NVARCHAR(30)或DATETIME(3个单独的列).我想确保对于任何给定的行,只有一列有结果,其他列为NULL.实现这一目标的最简单的检查约束是什么? 这方面的目的是尝试改进将非数字结果捕获到现有系统的能力.使用约束
我有一个(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读