创建复合键

Mr.*_*kin 4 t-sql sql-server composite-key

我有一张桌子:

Id   PersonId     Phone   IsPrimary
-----------------------------------
1     1          12345        1
2     1          55555        0
3     2          66666        1
4     3          77777        1
5     3          88888        0
6     3          99999        0
Run Code Online (Sandbox Code Playgroud)

如何创建约束,允许在每个PersonId中只插入一个IsPrimary = 1.对于所有PersonId,只有一个IsPrimary = 1.因此,在结果中我将无法插入下一条记录:

  Id   PersonId     Phone   IsPrimary
  -----------------------------------
  1     1          00000        1
Run Code Online (Sandbox Code Playgroud)

Gio*_*sos 9

您可以尝试创建唯一的筛选索引:

CREATE UNIQUE INDEX UQ_Person_isPrimary
ON Person (PersonId, IsPrimary)
WHERE IsPrimary = 1
Run Code Online (Sandbox Code Playgroud)