3

2つのテーブルがあり、どちらにも「名前」列があります。テーブルは互いに関連していません。これらの2つの列に一意性を適用したいと思います。

2つの列からインデックス付きビューを作成しようとしましたが、名前の完全なリストを取得するために、すべてのユニオンも完全な結合も使用できないことがわかりました。一意のインデックスを追加できる明らかな代替手段がないように感じます。

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 に答える