在两个可空的FK之间添加SQL XOR约束
发布时间:2020-12-12 16:23:08 所属栏目:MsSql教程 来源:网络整理
导读:我想在一个表中定义两个可空FK之间的约束,其中如果一个为空,另一个需要一个值,但两者都不能为空,两者都不能有值.逻辑是派生表从任一FK表继承数据以确定其类型.另外,对于有趣的奖励积分,这是一个坏主意吗? 解决方法 实现它的一种方法是简单地写下“异或”实际
我想在一个表中定义两个可空FK之间的约束,其中如果一个为空,另一个需要一个值,但两者都不能为空,两者都不能有值.逻辑是派生表从任一FK表继承数据以确定其类型.另外,对于有趣的奖励积分,这是一个坏主意吗?
解决方法实现它的一种方法是简单地写下“异或”实际意味着什么:CHECK ( (FK1 IS NOT NULL AND FK2 IS NULL) OR (FK1 IS NULL AND FK2 IS NOT NULL) ) 但是,如果你有很多FK,上面的方法很快就会变得笨拙,在这种情况下你可以这样做: CHECK ( 1 = ( (CASE WHEN FK1 IS NULL THEN 0 ELSE 1 END) + (CASE WHEN FK2 IS NULL THEN 0 ELSE 1 END) + (CASE WHEN FK3 IS NULL THEN 0 ELSE 1 END) + (CASE WHEN FK4 IS NULL THEN 0 ELSE 1 END) ... ) ) 顺便说一句,该模式有合法用途,例如this one(尽管由于缺少延迟约束而不适用于MS SQL Server).在您的特定情况下是否合法,我无法根据您目前提供的信息进行判断. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
- osx似乎在安装了unixODBC之后可以连接sqlserver服
- sql – Postgres中的Generate_series,从表中的开
- Perl访问MSSQL并迁移到MySQL数据库脚本实例
- sql-server – 查找文件夹安装的sql版本(!)?
- sql – 具有多个类别类型数据库模式的产品
- sql-server – RODBC odbcDriverConnect()连接错
- sql-server – SQLServer – 需要访问ACT!数据迁
- mybatis+mysql 使用存储过程生成流水号的实现代码
- 关于sqlserver2008本地计算机上的MSSQLSERVER服务
- sql-server – CTE和临时表有什么区别?
热点阅读