3

我有两个表,它们都有一个“名称”列。这些表彼此不相关。我想在这两列中强制执行唯一性。

我一直在尝试从两列中创建一个索引视图,但发现我不能使用 union all 或 full join 来获取完整的名称列表。我觉得我错过了一个明显的替代方案,它可以让我添加唯一索引。

4

1 回答 1

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) 
于 2012-09-03T11:37:17.843 回答