Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否有一种方法可以从DBMS端验证表中是否已经检查了“布尔”列(true),但仅检查了行的子集_Sql_Sql Server - Fatal编程技术网

Sql 是否有一种方法可以从DBMS端验证表中是否已经检查了“布尔”列(true),但仅检查了行的子集

Sql 是否有一种方法可以从DBMS端验证表中是否已经检查了“布尔”列(true),但仅检查了行的子集,sql,sql-server,Sql,Sql Server,我使用的是MSSQL Server,我想知道是否有一种方法,从DBMS的角度,验证布尔列是否在表中已被检查为true,但只针对行的子集 下面是一个例子: 我有下列表格 使用者 类型 用户界面 我想在表UsersTypes中插入以下内容: UserId | TypeId | IsDefaultChoice -------------------- 10 | 22 | true *注意:在整个表的IsDefaultChoice列中将有多个具有true值的行,但我希望在表User

我使用的是MSSQL Server,我想知道是否有一种方法,从DBMS的角度,验证布尔列是否在表中已被检查为true,但只针对行的子集

下面是一个例子:

我有下列表格

使用者

类型

用户界面

我想在表UsersTypes中插入以下内容:

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';