所以我有一个Employees表,其中包含字段EmployeeId
(GUID),EmployeeNumber
(字符串)和IsActive
(位)等字段。我希望SQL Server强制执行一条规则,其中任意数量的记录可以具有相同的员工编号,但仅给定员工编号的一条记录可能会将IsActive
位设置为时间。
我正在尝试确定让SQL服务器执行此操作的最有效或最有效的方法,但到目前为止,我只想出使用触发器的想法。考虑到触发器,我想我可能需要使用游标迭代inserted
表中的每一行并单独检查每一行。这让我担心表现。
我考虑使用约束,但显然我不能使用UNIQUE约束,因为我只允许两条记录。有没有更好的方法来处理这个而不是触发?
答案 0 :(得分:1)
一个(不太优雅)的解决方法是使用数字字段{activity_level},因此{EmployeeNumber,activity_level}是唯一的。然后,您应该定义MAX_INTEGER,或0,或MIN_INTEGER或您想要的任何值作为活动标志(具有此值的员工是活动的,所有其他值都不是)。我知道它不是很干净,但是如果你找不到更好的东西它可以做到这一点......
答案 1 :(得分:1)
以下链接说明了如何基于位/布尔字段强制执行条件唯一约束
SQL Server - conditional unique constraint
甲骨文 - Conditional unique constraint in oracle db
PostgreSQL的 - PostgreSQL: Conditional unique constraint
的MySQL - 似乎不可能