gpt4 book ai didi

SQL Server 条件唯一索引

转载 作者:行者123 更新时间:2023-12-02 16:49:56 24 4
gpt4 key购买 nike

给出下表(和示例数据):

PK | ClientID | SetID | Title
-----------------------------
P1 | C1 | S1 | Title1
P2 | C1 | S1 | Title1
P3 | C2 | S2 | Title1
P4 | C2 | S2 | Title1
P3 | C1 | S3 | Title2
P5 | C1 | S3 | Title2

假设一个集合属于一个客户端,我可以有一个唯一的索引来限制标题在客户端内唯一,除了它在同一集合中的 sibling 之外。

例如,我可以在两个 Clients 中拥有 Title1,但不能在一个 Client 中拥有两次。现在对于 Client1,我想拥有第二 strip 有 Title1 的记录,但前提是它与所有其他带有 Title 的记录具有相同的 SetID .

请注意,我使用的是 SQL Azure,但我也对更广泛的领域感兴趣(例如 2008 R2/2012)。

编辑:
请注意,我无法更改表的结构。它已经以这种方式存在,并且背后有一个复杂的业务层。如果我能按原样解决这个问题,那就太好了,如果不能,那么我可以让它损坏。

最佳答案

您可以尝试其他索引 View 。

例如,一个表:

create table dbo.Test (PK int, ClientID int, SetID int, Title varchar(50), primary key (PK))

insert into dbo.Test values
(1, 1, 1, 'Title1')
,(2, 1, 1, 'Title1')
,(3, 2, 2, 'Title1')
,(4, 2, 2, 'Title1')
,(5, 1, 3, 'Title2')
,(6, 1, 3, 'Title2')

View 和索引:

create view dbo.vTest
with schemabinding
as
select ClientID, Title, SetID, cnt=count_big(*)
from dbo.Test
group by ClientID, Title, SetID
GO
create unique clustered index UX_vTest on dbo.vTest (ClientID, Title)
GO

然后:

insert into dbo.Test values (7, 1, 1, 'Title1') -- will pass
insert into dbo.Test values (8, 1, 1, 'Title1') -- will pass
insert into dbo.Test values (9, 1, 2, 'Title1') -- will fail
insert into dbo.Test values (10, 2, 2, 'Title1') -- will pass
insert into dbo.Test values (11, 1, 3, 'Title1') -- will fail

关于SQL Server 条件唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20102175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com