sql - 一个 SQL Server 约束中的 UNIQUE 和 OR?
问题描述
我有一个表,我想要一个检查以下内容的约束(字母是列名,W 是“位”数据类型):
If and only if 'W' = 0, check that X, Y & Z are unique.
Else, allow all new data.
我可以分别做'W' is False
和Check X, Y & Z are unique
,但合并逻辑以允许上述是我无法弄清楚的。
我试过
W = 1 OR UNIQUE (X, Y, Z)
但 SSMS 说它无效。
提前感谢您的帮助:)
解决方案
你不能通过约束来做到这一点。相反,使用过滤的唯一索引:
create unique index unq_x_w on t(x) where w = 0;
create unique index unq_y_w on t(y) where w = 0;
create unique index unq_z_w on t(z) where w = 0;
实际上,以上将您的问题解释为每一列都是独一无二的。如果您希望三元组是唯一的:
create unique index unq_xyz_w on t(x, y, z) where w = 0;
推荐阅读
- pandas - 如果不存在按日期分组,则添加行值
- docker - 如何删除有效的 Nginx 服务器块
- sql - 将 OData 查询选项转换为弹性搜索 SQL
- r - 如何使用具有多个结果的 for 循环
- c# - NHibernate LinqToHqlGenerator for Oracle 全文索引“包含”关键字
- artifactory - Artifactory 配置为错误地将二进制文件存储在两个地方(?)以及如何回到一个
- testing - 在不同的组织中测试 MS Teams 应用程序
- django - Docker/Django - 如何确保在应用程序启动之前完成所有迁移?
- sql-server - 从 pyspark 代码将数据向上插入 SQL Server
- jquery - asp.net 使用 xhr 将数据发送到控制器操作