使用对同一个表的多个引用为视图编制索引

时间:2017-04-05 19:29:12

标签: sql-server full-text-search

我们所有的对象都是版本化的,这意味着我们所有的表都有IdVersion列,因此每个Id有多行,每个版本对应一行。另一个名为ObjectManager的表包含CurrentVersion。因此,通过将表连接到该表,我们可以获得具有最新版本的表行。

我正在尝试全文搜索连接在一起的三个表的视图。每个人都必须拥有自己的ObjectManager连接,但这会阻止索引并提供有关自连接的错误。

解决这个问题的一般方法是什么?一旦设置了解决方案,我不想做任何事情来维护它,最好是。

create view v_AACOPolicySearch 
with schemabinding as
select p.Id, p.ReferenceNo, a.name Agent, c.Name Client
from dbo.AACOPolicy p join
dbo.Agent a on p.Agent = a.id join
dbo.CLClient c on p.Client = c.Id join
dbo.ObjectManager op on p.Id = op.Id and p.VersionNo = op.CurrentVersionNo join
dbo.ObjectManager oa on a.id = oa.Id and a.versionNo = oa.CurrentVersionNo join
dbo.ObjectManager oc on c.Id = oc.Id and c.VersionNo = oc.CurrentVersionNo
where p.ReferenceNo like 'YDS%'

create unique clustered index UQ_AACOPolicySearch on dbo.v_AACOPolicySearch (Id)
  

Msg 1947,Level 16,State 1,Line 84无法在视图上创建索引   “AACO_TEST.dbo.v_AACOPolicySearch”。该视图包含自联接   “AACO_TEST.dbo.ObjectManager”。

请记住此声明之后将是:

CREATE FULLTEXT INDEX ON v_AACOPolicySearch(ReferenceNo, Agent, Client)
KEY INDEX UQ_AACOPolicySearch ON AACO_TEST_FULLTEXT
WITH CHANGE_TRACKING AUTO

我不认为这是重复的原因是因为没有人回答过真正的工作。他们已经解释了为什么它不可能,但就是这样。

我无法控制所有符合AgentCLClient的代码。所以,如果我向他们添加uniqueidentifier列,我几乎或根本不知道会破坏什么。这可能是可能的,但它会非常可怕。

0 个答案:

没有答案