如何使用Schemabinding创建包含来自2个不同数据库的表的索引视图

时间:2014-12-05 15:59:30

标签: sql sql-server sql-server-2008-r2

这是问题......

我在同一个SQL Server 2008 R2实例上有2个数据库。

DB-One用于网站,DB-two是每天从转储中更新的datadumb。

现在我想在DB-One上创建一个索引视图,我在DB 2引用了两个表。

所以我的查询就像是

SELECT 
    TBA.COLA, TBB.COlA
FROM 
    DB-ONE.TBA.COLA A
JOIN 
    DB-TWO.TBB.COLA B ON (A.Id= B.Id)

现在这个查询工作正常,显然......但是如果我尝试使用以下语法创建一个视图,它会给我一个错误

CREATE VIEW TESTVIEW WITH SCHEMABINDING AS

错误:

  

无法对视图'TESTVIEW'进行架构绑定,因为名称'DB-ONE.TBA.COLA A'对于架构绑定无效。名称必须采用两部分格式,对象不能引用自身。

因此,如果这种方法不可行,那么任何人都可以提出任何替代方案吗?

1 个答案:

答案 0 :(得分:4)

如错误消息中所述,使用架构绑定时#34;名称必须采用两部分格式"这意味着它们必须采用[schema]。[tablename]格式,因此这些表不能位于2个独立的数据库中。

  • 选项1:具有一个计划的ETL作业,该作业将视图数据保存在Db-One的表中,根据需要对该表进行索引,然后在每日"数据转储后调度ETL加载"。

运行一次

USE [DB-ONE]
GO
CREATE TABLE dbo.myReport(/*column structure of your indexed view goes here*/);
go
--index table as needed
go

然后安排在每日"数据转储"之后从DB-ONE运行加载到DB-TWO:

use [DB-ONE]
GO
insert into dbo.myReport(/*list of columns*/)
SELECT TBA.COLA, TBB.COlA
FROM DB-ONE.TBA.COLA A
JOIN DB-TWO.TBB.COLA B ON (A.Id= B.Id)
;
  • 选项2:您可以将DB-TWO表中的所有数据复制到DB-ONE中,然后仍然在DB-ONE表上创建索引视图。