SQL 对多列的唯一约束

问题描述 投票:0回答:1

我正在尝试找出 2 列上的交叉唯一约束,我知道如何做 2 列,但不知道如何做跨列

这是我的数据样本

连接经销商1 经销商2 1 10 20 2 20 30 3 20 10

我的应用程序认为连接 1 和 3 是重复的,因为它们都有相同的经销商。有没有办法设置约束来做到这一点?

到目前为止,这些是我的限制 ALTER TABLE DealerConnections 添加约束 UC_DealerConnections_Dealer1 UNIQUE(Dealer1FK、Dealer2FK) 更改表 DealerConnections 添加约束 UC_DealerConnections_Dealer2 UNIQUE(Dealer2FK、Dealer1FK)

所有三个连接都通过了约束,但我希望连接 3 失败,因为它重复 1

TIA 汤姆

sql server constraints unique
1个回答
0
投票

-- 创建表

CREATE TABLE DealerConnections (
    ConnectionID INT PRIMARY KEY,
    Dealer1FK INT NOT NULL,
    Dealer2FK INT NOT NULL
);

-- 添加计算列

ALTER TABLE DealerConnections
ADD ComputedDealerPair AS 
    (CASE 
        WHEN Dealer1FK < Dealer2FK THEN CAST(Dealer1FK AS VARCHAR) + '-' + CAST(Dealer2FK AS VARCHAR)
        ELSE CAST(Dealer2FK AS VARCHAR) + '-' + CAST(Dealer1FK AS VARCHAR)
    END);

-- 在计算列上创建唯一索引

CREATE UNIQUE INDEX IX_UniqueDealerPair
ON DealerConnections (ComputedDealerPair);
© www.soinside.com 2019 - 2024. All rights reserved.