スイート、ソリューションは非常にエレガントだと思います。必要なソリューションに最も近い完全な代替手段であるため、純粋に回答として書いています。しかし、それは私の元の質問に正しく答えるものであるため、あなたの答えを答えとしてマークします。
そうです、最初に私がしたことは、トリガーが外部キーを必要とするベンダーから、他のベンダー テーブルの照合で永続化された計算列としてテーブルに新しい列を作成する許可を得たことです。
DECLARE @Collation nvarchar(100)
DECLARE @SQL nvarchar(1000)
SET @Collation = ( SELECT collation_name FROM sys.columns WHERE OBJECT_ID IN ( SELECT OBJECT_ID FROM sys.objects WHERE type = 'U' AND name = 'Vendor1Table' ) AND name = 'Vendor1Column' )
SET @SQL = 'ALTER TABLE [Vendor2Table] ADD [Vendor2ComputedColumn] AS [Vendor2Column] COLLATE ' + @Collation + ' PERSISTED'
EXECUTE( @SQL )
GO
次に、計算列に候補キーを追加しました。
ALTER TABLE [Vendor2Table] ADD CONSTRAINT [CCUNQ1_x] UNIQUE NONCLUSTERED
(
[Vendor2ComputedColumn] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
次に、計算列への外部キーを作成しました。
ALTER TABLE [dbo].[Vendor1Table] WITH CHECK ADD CONSTRAINT [CCFOK01_x] FOREIGN KEY ( [Vendor1Column] )
REFERENCES [dbo].[Vendor2Table] ( [Vendor2ComputedColumn] )
GO
ALTER TABLE [dbo].[Vendor1Table] CHECK CONSTRAINT [CCFOK01_x]
GO
最後に、元の SQL スクリプトは見事に合格します。
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
WHERE CONSTRAINT_NAME =
(
SELECT name FROM sys.foreign_keys
WHERE parent_object_id = OBJECT_ID( 'Vendor1Table' )
AND referenced_object_id = OBJECT_ID( 'Vendor2Table' )
)
うまくいけば、この小さなウォークスルーがいつか他の魂を助けるでしょう:)
デビッドを助けてくれてありがとう、ありがとう!