我们所有的对象都是版本化的,这意味着我们所有的表都有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,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
我不认为这是重复的原因是因为没有人回答过真正的工作。他们已经解释了为什么它不可能,但就是这样。
我无法控制所有符合Agent
或CLClient
的代码。所以,如果我向他们添加uniqueidentifier
列,我几乎或根本不知道会破坏什么。这可能是可能的,但它会非常可怕。