我有两个表,它们都有一个“名称”列。这些表彼此不相关。我想在这两列中强制执行唯一性。
我一直在尝试从两列中创建一个索引视图,但发现我不能使用 union all 或 full join 来获取完整的名称列表。我觉得我错过了一个明显的替代方案,它可以让我添加唯一索引。
我有两个表,它们都有一个“名称”列。这些表彼此不相关。我想在这两列中强制执行唯一性。
我一直在尝试从两列中创建一个索引视图,但发现我不能使用 union all 或 full join 来获取完整的名称列表。我觉得我错过了一个明显的替代方案,它可以让我添加唯一索引。
假设您的两个基表都对“名称”有唯一约束,那么违反唯一性的唯一方法是两个表中的名称相同。
即,您希望针对它们的联接返回零行。因此,您可以将该连接的结果与具有 2 行的表交叉连接并创建一个唯一索引。
CREATE TABLE dbo.Two
(
N INT PRIMARY KEY
)
INSERT INTO dbo.Two
VALUES (1),
(2)
GO
CREATE VIEW dbo.UniqueNames
WITH SCHEMABINDING
AS
SELECT T1.Name
FROM dbo.T1
INNER JOIN dbo.T2
ON T1.Name = T2.Name
CROSS JOIN dbo.Two
GO
CREATE UNIQUE CLUSTERED INDEX IX
ON dbo.UniqueNames(Name)