我有两个表都有一个'Name'列。这些表彼此无关。我想在这两个列中强制实现唯一性。
我一直在尝试从两列创建一个索引视图,但发现我不能使用union all或完全连接来获取完整的名称列表。我觉得我错过了一个明显的选择,它可以让我添加唯一索引。
答案 0 :(得分:11)
假设两个基表对“名称”都有唯一约束,那么唯一可以违反唯一性的方法是两个表中是否有相同的名称。
即。你期望对他们的连接返回零行。因此,您可以将该连接的结果与具有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)