【问题标题】:How to set one column true which will make all other entity value false in sql?如何将一列设置为真,这将使sql中的所有其他实体值变为假?
【发布时间】:2015-01-30 15:03:24
【问题描述】:

我在用户表中有一个列作为 IsAdmin 位。一次只能有一个人管理员。因此,我想要的是约束表以将所有其他用户 IsAdmin 值设置为 false 将一个用户设置为 true?我可以通过将所有用户设置为 false 来实现这一点,但我只是想知道是否已经有一些东西可以处理这些场景。我感谢您的帮助。

【问题讨论】:

  • 首先将所有用户设置为 false 可能更容易,但如果您想走更复杂的路径,您可以使用触发器来处理。 sqlteam.com/article/an-introduction-to-triggers-part-i
  • 您可以有一个(伪)约束来强制(最多一个)用户设置了IsAdmin,但约束不会对数据进行更改 - 甚至不会在当前正在考虑的行中,更不用说其他行了。
  • 我实际上期待有更好的方法来做到这一点。似乎首先将所有值设置为 false,然后将一个设置为 true 是完成这项工作的最简单方法吗?
  • 顺便说一句,我正在使用实体框架。所以我可以创建一种方法来完成我相信的这项工作。我只是想知道是否有更好的方法来解决这些类型的问题。
  • 如果只添加另一个表tblAdminsuser_id 字段和一行,那么您只需更新此表即可更改管理员?

标签: c# sql sql-server


【解决方案1】:

您可以使用trigger 来解决这个问题。 在更新一行之前写一个triggertrigger用来使所有列false,触发后设置一列为true

create trigger trigger-name on table-name
before update
as
begin
    update table-name set column-name=false;
end 
go 

【讨论】:

  • 触发器可能很难正确 - 你需要考虑例如一个多行插入或更新,尝试同时创建多个IsAdmin
  • 那么你有什么建议@Damien_The_Unbeliever?
  • @akdurmus - 我可能会实施一个约束来enforce 最多将一个列标记为 Admin,并提供一个用于切换它的存储过程。拥有一个命名良好的存储过程(希望如此)清楚地表明只有一个用户可以通过管理员,但约束确保任何直接表更新/插入都不会违反要求。
猜你喜欢
  • 1970-01-01
  • 2015-03-29
  • 2012-03-19
  • 2021-05-06
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2022-08-24
相关资源
最近更新 更多