【发布时间】:2009-11-27 17:51:13
【问题描述】:
我在 SQL Server 2005 中提出足够的限制时遇到问题。我的问题涉及以下表格:
Table PKTable
{
pk integer primary key,
property integer,
}
Table FKTable
{
pk integer primary key,
fk integer references PKTable(pk),
}
我真的想让记录 fk_rec 在它引用的 PKTable 记录的属性 = 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
所以基本上,('True', 'default') 记录将始终存在于视图中,并且当有人尝试将行插入 FKTable 并且它引用的 PKTable 记录具有属性 = 5 时,我得到约束违规因为上面联合查询的第一部分会返回一些东西。反正就是这个想法。但是,SQL Server 2005 不允许对涉及联合的视图进行索引。然后我尝试创建另一个视图:
SELECT UniqueCol, DiffCol FROM TheViewAbove
在这种情况下,在 UniqueCol 上放置唯一索引会失败,因为您不能在引用另一个视图的视图上设置索引。我知道这是一个很长的镜头。有什么办法可以解决这个问题?
谢谢!
【问题讨论】:
标签: sql sql-server sql-server-2005