2つのテーブルがあり、どちらにも「名前」列があります。テーブルは互いに関連していません。これらの2つの列に一意性を適用したいと思います。
2つの列からインデックス付きビューを作成しようとしましたが、名前の完全なリストを取得するために、すべてのユニオンも完全な結合も使用できないことがわかりました。一意のインデックスを追加できる明らかな代替手段がないように感じます。
2つのテーブルがあり、どちらにも「名前」列があります。テーブルは互いに関連していません。これらの2つの列に一意性を適用したいと思います。
2つの列からインデックス付きビューを作成しようとしましたが、名前の完全なリストを取得するために、すべてのユニオンも完全な結合も使用できないことがわかりました。一意のインデックスを追加できる明らかな代替手段がないように感じます。
両方のベーステーブルに「名前」に対する一意の制約があるとすると、一意性に違反する可能性がある唯一の方法は、両方のテーブルに同じ名前がある場合です。
つまり、それらに対する結合がゼロ行を返すことを期待します。したがって、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)