Sql server 索引对同一表具有多个引用的视图

Sql server 索引对同一表具有多个引用的视图,sql-server,full-text-search,Sql Server,Full Text Search,我们所有的对象都是版本化的,这意味着我们所有的表都有Id和Version列,因此每个Id都有多行,每个版本一行。另一个名为ObjectManager的表包含CurrentVersion。因此,通过将一个表连接到该表,我们可以得到具有最新版本的表行 我正在尝试全文搜索三个连接在一起的表的视图。每个对象都必须有自己的到ObjectManager的连接,但这会阻止索引,并给出关于自连接的错误 解决这个问题的一般方法是什么?一旦解决方案建立起来,我不想做任何事情来维护它,最好是这样 create vie

我们所有的对象都是版本化的,这意味着我们所有的表都有
Id
Version
列,因此每个
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,16级,状态1,第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
我不认为这是重复的原因是因为从来没有人回答过真正的问题。他们已经解释了为什么不可能,但仅此而已


我无法控制点击
Agent
CLClient
的所有代码。因此,如果我向它们添加一个
uniqueidentifier
列,我几乎不知道或根本不知道会出现什么问题。这可能是可能的,但会非常可怕。

你想要的是不可能的。我脑海中唯一能想到的解决方法是周期性运行的进程(设置SQL作业),它将数据从普通视图复制到持久表中,然后您可以根据需要对其进行索引。这可能是可以接受的,也可能是不可以接受的。@pmbAustin,我要求的是一种解决问题的一般方法。哈哈,你说这不可能,然后你证明了这是可能的。你为什么不回答一下,让我们看看有没有更简单的方法;可能不会我不认为这是个答案,真的。这是一种黑客行为,需求将决定它是否是一种可接受的行为。可以随意尝试这种实现(基本上是“快照”数据,对其进行索引,在达到某个陈旧期后,扔掉它,再次快照,再次索引,然后重复"。如果它对你有效,那就太好了。不过,这并不是问题的一般答案,对吧。@pmbAustin,好的,我们现在正在进行黑客攻击。因此,如果你
从MyStagingTable中删除*然后
从v_AACOPolicySearch中插入MyStagingTable select*,你必须
删除
并重新创建
全文索引?我会截断ra除了删除*(特别是如果您有大量数据),您还必须删除并重新创建全文索引目录。