Table PKTable
{
pk integer primary key,
property integer,
}
Table FKTable
{
pk integer primary key,
fk integer references PKTable(pk),
}
我真的想使它不可能爲了一個記錄,fk_rec,當它引用的PKTable記錄擁有property = 5時,它就存在。我試圖做的第一件事是用下面的查詢創建一個模式綁定視圖,並在UniqueCol字段上創建一個唯一的索引。
SELECT 'True' AS UniqueCol, 'uh oh' AS DiffCol
FROM FKTable INNER JOIN
PKTable ON FKTable.fk = PKTable.pk
WHERE PKTable.property = 5
UNION
SELECT 'True' AS UniqueCol, 'default' AS DiffCol
所以基本上,(「真」,「默認」)記錄將始終存在於視圖,當有人試圖將行插入FKTable和它引用的PKTable記錄具有屬性= 5,我因爲上面的聯合查詢的第一部分會返回一些東西,所以得到一個約束違規。無論如何,這是主意。但是,SQL Server 2005不允許在涉及聯合的視圖上使用索引。然後我試圖創建另一種觀點認爲:在這種情況下
SELECT UniqueCol, DiffCol FROM TheViewAbove
上UniqueCol把唯一索引失敗,因爲你不能對引用另一個視圖的視圖索引。我知道這是一個長鏡頭。任何方式來解決這個問題?
謝謝!
@Nitai - 這是行不通的。你是否正確地閱讀了這個問題? @Alex - 我可能最終會做你的建議。我之前做過,我不確定爲什麼我不想改變這裏的桌子。 – Jordan 2009-11-27 18:23:02