如何在 SQL 服务器中创建模式绑定的跨数据库视图

How to create schema bound, cross-database view in SQL Server

我正在尝试在 SQL Server 2008 上创建索引视图。我有一个主数据库,我无法在其中进行任何更改(在添加表、视图等方面)。但是,出于各种需要使用实时数据的原因,我需要创建一些不同的视图。

我已经在我的主数据库旁边创建了一个新数据库,所以我可以在那里创建视图。我能够很好地创建视图,但我想索引一些较大的视图。但是,当我尝试跨数据库创建架构绑定视图时,收到以下错误:

Cannot schema bind view 'dbo.Divisions' because name 'master.dbo.hbs_fsdv' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.

因为我要跨数据库使用视图,所以我必须引用三部分格式的名称。

我的视图创建语句:

CREATE VIEW dbo.Divisions WITH SCHEMABINDING AS
SELECT master.dbo.hbs_fsdv.seq_              AS DivisionID, 
       master.dbo.hbs_fsdv.fs_division_desc_ AS Description 
  FROM master.dbo.hbs_fsdv

如何在 SQL 服务器中创建索引跨数据库视图?

简单明了。你不能。来自 MSDN 页面:

The view must reference only base tables that are in the same database as the view.

https://msdn.microsoft.com/en-us/library/ms191432.aspx

虽然(根据文档)不能直接用简单的 SQL 语句完成,但这个用例很常见并且有解决方案。

该架构必须涉及将远程表缓存到您的中央数据库中,并在它们之上构建索引视图。

可以在此处找到关于此的一些很好的注释:

https://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/