我正在尝试找出 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 汤姆
-- 创建表
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);