Sql 是否有一种方法可以从DBMS端验证表中是否已经检查了“布尔”列(true),但仅检查了行的子集
我使用的是MSSQL Server,我想知道是否有一种方法,从DBMS的角度,验证布尔列是否在表中已被检查为true,但只针对行的子集 下面是一个例子: 我有下列表格 使用者 类型 用户界面 我想在表UsersTypes中插入以下内容:Sql 是否有一种方法可以从DBMS端验证表中是否已经检查了“布尔”列(true),但仅检查了行的子集,sql,sql-server,Sql,Sql Server,我使用的是MSSQL Server,我想知道是否有一种方法,从DBMS的角度,验证布尔列是否在表中已被检查为true,但只针对行的子集 下面是一个例子: 我有下列表格 使用者 类型 用户界面 我想在表UsersTypes中插入以下内容: UserId | TypeId | IsDefaultChoice -------------------- 10 | 22 | true *注意:在整个表的IsDefaultChoice列中将有多个具有true值的行,但我希望在表User
UserId | TypeId | IsDefaultChoice
--------------------
10 | 22 | true
*注意:在整个表的IsDefaultChoice列中将有多个具有true值的行,但我希望在表UsersTypes中,每个用户ID组只能有一行设置为true
我正在寻找一种强制插入失败的方法,因为用户John Smith已将一个条目IsDefaultChoice设置为true,并且在插入或更新时无法为该用户设置两个true条目。是的,您可以添加一个过滤后的唯一索引:
create unique index unq_usertypes_default
on usertypes(userId)
where IsDefaultChoice = 'TRUE';
这将确保在UserTypes中最多为一行设置IsDefaultChoice。请注意,这可能会使将行更新为新的默认值变得复杂-您必须确保取消设置前一行
请注意,SQL Server没有布尔类型。我想你指的是位,它可以识别“真”和“假”为有效值。是的,我指的是位类型。
UserId | TypeId | IsDefaultChoice
--------------------
10 | 20 | true
10 | 21 | false
11 | 20 | true
UserId | TypeId | IsDefaultChoice
--------------------
10 | 22 | true
create unique index unq_usertypes_default
on usertypes(userId)
where IsDefaultChoice = 'TRUE';