我在create view语句中使用以下格式的以下对象。
dbo.objects1 A
INNER JOIN db2.dbo.object2
INNER JOIN db2.dbo.object3
INNER JOIN db2.dbo.object4
INNER JOIN db2.dbo.object5
objects1
是Database1
中包含索引的表格。 objects2 through objects5
位于另一个database
中,所有这4个对象都以No indexes
进行查看。
现在我正在尝试使用以上所有五个对象创建一个索引视图,但SQL服务器不允许我。
第一个错误是:
Names must be in two-part format and an object cannot reference itself.
第二个错误是:
Cannot schema bind view 'dbo.vw_Order' because name 'db2.dbo.object2' is invalid for schema binding.
现在我搜索了这些错误,我开始遵循以下假设:
当我像查询一样运行视图时,执行计划建议我在db2中的对象的列上创建索引。如果我的假设是正确的,请告诉我。如果没有,请告诉我如何在这种情况下创建视图。
答案 0 :(得分:17)
正如您已经完成的研究,索引视图定义中的所有对象(表/视图)必须具有TWO PART
名称即[Schema].[Object]
,这意味着所有对象都将位于一个数据库中并且您无法跨多个数据库创建索引视图。索引视图有很多限制,如果可能,请考虑创建存储过程
您获得的其他错误是您在视图的定义中缺少WITH SCHEMABINDING
选项。创建索引视图时必须要求创建索引视图时必须使用WITH SCHEMABINDING选项,即在删除此视图之前,不能更改任何基础表/对象模式。
我再次建议查看存储过程,因为在您的情况下创建索引视图似乎是不可能的,因为它带来了所有限制。
答案 1 :(得分:8)
将所有者添加到视图名称和表中。 像:
Create VIEW dbo.MyView
WITH SCHEMABINDING
AS
SELECT * From dbo.Users
答案 2 :(得分:2)
您无法使用不同数据库的两个对象创建索引视图。