Ric*_*key 3 sql-server sql-server-2014
假设您有一个地址表,如下所示:
dbo.Address
(
AddressId INT PRIMARY KEY,
CustomerId INT,
IsPrimary BIT,
...
more typical address fields
...
)
Run Code Online (Sandbox Code Playgroud)
我想要一个检查约束来强制每个客户始终只有一个主要地址,允许我为客户切换主要地址或添加新地址并使其成为主要地址。
我知道我可以有一个约束,即不超过一个是主要的(允许没有一个是主要的),然后在插入/更新一个地址为主要地址之前将所有客户的地址设置为非主要地址。但是,如果客户有地址,其中之一必须始终具有 IsPrimary = 1,我将如何强制执行?
您可以在表上定义一个过滤索引,这将为您执行此操作,无需为此使用检查约束或附加表。
CREATE UNIQUE INDEX IX_Address_UniquePrimaryAddress
ON dbo.Address(CustomerId)
WHERE IsPrimary = 1;
Run Code Online (Sandbox Code Playgroud)
这是一个很好的过滤索引链接,应该可以帮助您:
https://msdn.microsoft.com/en-us/library/cc280372.aspx
归档时间: |
|
查看次数: |
754 次 |
最近记录: |