我有两个表,它们都有一个'Name‘列。这些表彼此不相关。我想在这两列中强制实现唯一性。
我一直在尝试在这两列的基础上创建一个索引视图,但我发现不能使用union all或full join来获得完整的名称列表。我觉得我错过了一个明显的替代方案,它允许我添加唯一索引。
发布于 2012-09-03 19:37:18
假设您的两个基表在' name‘上都有一个唯一的约束,那么唯一违反唯一性的方法就是两个表中有相同的名称。
也就是说,您期望对它们的连接返回零行。因此,您可以对包含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) https://stackoverflow.com/questions/12246714
复制相似问题