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