sql - 添加特殊约束以避免出现这种情况的重复行?

标签 sql sql-server sql-server-2008 tsql unique-constraint

我有一个如下所示的表格:

ClientId  FloorNum   BedNum   IsActive
11        2          212      1        
12        2          214      0        
12        2          214      1        
13        2          215      0        
13        2          215      0        
13        2          215      0        
13        2          215      0        
13        2          215      1        
12        2          215      1        

如您所见,FloorNum/BedNum 组合 2/215 有两行,其中 IsActive 等于 1。这是不可能发生的。 p>

另一方面,一个FloorNum/BedNum组合可以有许多行,其中IsActive等于0。

如何向表添加约束,以便 FloorNum/BedNum 组合只能有一行 IsActive = 1?

感谢任何帮助。

最佳答案

您可以创建a filtered unique index带有 WHERE 子句。

CREATE UNIQUE NONCLUSTERED INDEX IX_[index name]_FloorNum_BedNum ON [myTable] (
    FloorNum ASC,
    BedNum ASC)
WHERE (IsActive = 1)

这只会考虑 IsActive 列设置为 1 的记录。

根据您的描述,我认为 ClientId 在此示例中不是必需的,但如果我错了,您也可以将其添加到索引中。

关于sql - 添加特殊约束以避免出现这种情况的重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36696418/

相关文章:

php - 查找某个项目在给定的多个数组中的哪个数组,并且该项目仅存在于 PHP/SQL 中的一个数组中

MySQL Dense_Rank() 和 Max() 函数不在同一语句中工作

php - Laravel 更新记录 - 这是 2 个 MySQL 调用最高效的方法吗?

sql-server - SQL Server 的多边形算法中的点

sql - 聚类因子和唯一键

c# - 当表没有主键时使用 DeleteAllOnSubmit

c# - Fluent NHibernate 映射到 SQL Server CHAR(10) ID 列

sql-server-2008 - 如何在同一查询中引用另一列中的聚合列?

sql-server-2008 - 如何从sql查询结果中删除空行?

c# - Entity Framework 已经有一个打开的 DataReader 与此命令关联,必须先将其关闭