sql-server – 检查约束只有三列中的一列是非空的
发布时间:2020-05-24 17:40:26 所属栏目: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 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 为什么此查询不会发生分区消除?
- 联合SQL Server表中的所有几何,如Postgres中的GeomUnion
- sql-server-2008 – 在Management Studio和Profiler中查询执
- sql-server – 有没有办法在TSQL中生成表创建脚本?
- MySQL数据库优化技术之索引使用技巧总结
- sql – Oracle:快速NOT IN用于多列
- SQL DateDiff没有enddate
- sql – 如何在Oracle 11g中将分区表从一个表空间移动到另一
- sql-server – 使用Windows Auth将单向到SQL Server
- sql-server – 解释SQL Server锁
