【发布时间】:2012-09-03 19:37:17
【问题描述】:
我有两个表,它们都有一个“名称”列。这些表彼此不相关。我想强制这两列的唯一性。
我一直在尝试从两列中创建一个索引视图,但发现我不能使用 union all 或 full join 来获取完整的名称列表。我觉得我错过了一个明显的替代方案,可以让我添加唯一索引。
【问题讨论】:
标签: sql-server sql-server-2008-r2
我有两个表,它们都有一个“名称”列。这些表彼此不相关。我想强制这两列的唯一性。
我一直在尝试从两列中创建一个索引视图,但发现我不能使用 union all 或 full join 来获取完整的名称列表。我觉得我错过了一个明显的替代方案,可以让我添加唯一索引。
【问题讨论】:
标签: sql-server sql-server-2008-r2
假设您的两个基表都对“名称”具有唯一性约束,那么违反唯一性的唯一方法是两个表中的名称相同。
即您希望针对它们的联接返回零行。因此,您可以将该连接的结果与一个有 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)
【讨论】: